获取已排序集合中的第一项

时间:2016-02-08 11:50:56

标签: handlebars.js assemble grunt-assemble

假设我有类似的东西:

{{#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 个答案:

答案 0 :(得分:1)

grunt-assemble而构建的把手助手 - 帮助者不会处理您为此特定案例要做的一些事情。

我们正在努力发布开发分支,其中一些将更容易用于把手子表达式。

现在,你可能想要自己做一个排序的助手,然后你就可以使用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}}

这应该得到你所需要的。希望它有所帮助。