Получить первый элемент в отсортированной коллекции
Предполагая, что у меня есть что-то вроде:
{{#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}}
Это должно получить то, что вам нужно. Надеюсь, поможет.