Получить первый элемент в отсортированной коллекции

Предполагая, что у меня есть что-то вроде:

{{#each pageElements}}
  {{#is pageElement "news"}}
    {{#withSort pages "data.posted" dir="desc"}}
      <a href="/{{relativeLink}}">
        {{formatDate data.posted "%d.%m.%Y"}}: {{data.title}}
      </a>
    {{/withSort}}
  {{/is}}
{{/each}}

Как бы я показал только первый элемент, который withSort выплевывает?

Я думаю, что я могу использовать first помощник по сбору для этого ( http://assemble.io/helpers/helpers-collections.html), но мне не удалось получить правильный синтаксис.

1 ответ

Помощники в руле-помощники, которые были построены для grunt-assemble не занимайтесь некоторыми вещами, которые вы хотели бы сделать для этого конкретного случая.

Мы работаем над тем, чтобы опубликовать ветку dev, и некоторые из них будут проще использовать с подвыражениями на руле.

На данный момент, вы, вероятно, захотите сделать свой собственный помощник, который выполняет сортировку, тогда вы можете использовать first:

Делать sort.js вспомогательный файл:

var get = require('get-value');

module.exports = function sort(array, field, options) {
  var arr = cloneArray(array);
  if (typeof options === 'undefined') {
    options = field;
    field = null;
    arr = arr.sort();
  } else {
    arr = arr.sort(sortBy(field));
  }

  if (options.hash && options.hash.dir === 'desc') {
    arr = arr.reverse();
  }
  return arr;
};

function cloneArray(arr) {
  var len = arr.length, i = 0;
  var results = new Array(len);
  while(i++ < len) {
    results[i] = arr[i++];
  }
  return results;
}

function sortBy(prop) {
  return function(a, b) {
    var aVal = get(a, prop);
    var bVal = get(b, prop);
    if (aVal > bVal) {
      return 1;
    } else {
      if (aVal < bVal) {
        return -1;
      }
    }
    return 0;
  }
}

Зарегистрируйте помощника с помощью сборки и используйте в шаблоне:

{{#each pageElements}}
  {{#is pageElement "news"}}
    {{#withFirst (sort pages "data.posted" dir="desc")}}
      <a href="/{{relativeLink}}">
        {{formatDate data.posted "%d.%m.%Y"}}: {{data.title}}
      </a>
    {{/withFirst}}
  {{/is}}
{{/each}}

Это должно получить то, что вам нужно. Надеюсь, поможет.

Другие вопросы по тегам