0

假设我有类似的东西:

{{#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),但我无法正确使用语法。

4

1 回答 1

1

handlebars-helpers 中的 helpersgrunt-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;
  }
}

使用 assemble 注册 helper 并在模板中使用:

{{#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}}

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

于 2016-02-08T23:58:33.880 回答