自定义把手每个助手都有索引

时间:2016-01-16 03:39:42

标签: javascript handlebars.js

我编写了一个循环遍历数组的助手,但现在我仍然坚持为每次迭代获取索引。我希望在我看来打印当前项目的索引。

helpers: {
    each_min: function(ary, min, options) {
      if(!ary || ary.length == 0)
          return options.inverse(this);

      var result = [];
      for(var i = 0; i < min; ++i)
          result.push(options.fn(ary[i]));
      return result.join('');
    }
}

我的模板

{{#each_min p.name 4}}
{{#if this}}
{{index}} {{this}}
{{else}}
<p>-</p>
{{/if}}
{{/each_min}}

1 个答案:

答案 0 :(得分:1)

通过查看手柄文档,我在Block helpers部分找到了相关信息。

  

块帮助程序还可以将私有变量注入其子模板。这对于添加原始上下文数据中不存在的额外信息非常有用。 ...确保在每个帮助程序中创建一个新数据框,以分配自己的数据。否则,下游帮助程序可能会意外地改变上游变量。

基于我做出这些改变:

模板

{{#each_min p.name 4}}
    {{#if this}}
        {{@index}} {{this}}
    {{else}}
        <p>-</p>
    {{/if}}
{{/each_min}}

<强>辅助

function(ary, min, options) {
    if(!ary || ary.length === 0) {
        return options.inverse(this);
    }
    var data;
    if (options.data) {
        data = Handlebars.createFrame(options.data);
    }

    var result = [];
    for(var i = 0; i < min; ++i) {
        if (data) {
            data.index = i;
        }
        result.push(options.fn(ary[i], {data: data}));
    }

    return result.join('');
}