柜台车把#each(Counter for handlebars #each)

2019-08-17 06:16发布

在车把,说我有一个集合names我该怎么办

{{#each names}}
{{position}}
{{name}}
{{/each}}

其中{{位置}}为1头名,2为第二名称等。难道我非得存储位置集合中的一个关键?

Answer 1:

您可以使用内置的把手@index符号做到这一点:

{{#each array}}
  {{@index}}: {{this}}
{{/each}}

@index会给给定阵列中的每个项的(基于零的)指数。

请注意,使用的手把你必须使用符号@@指数,以避免编译错误的Razor视图引擎的人。

欲了解更多内置的助手看到http://handlebarsjs.com/



Answer 2:

Handlebars.registerHelper("counter", function (index){
    return index + 1;
});

用法:

{{#each names}}
    {{counter @index}}
    {{name}}
{{/each}}


Answer 3:

虽然你不能做到这一点与任何本地把手帮手,你可以创建自己的。 您可以拨打Handlebars.registerHelper()它传递一个字符串,你想匹配(位置)的名称,这将返回当前位置计数功能。 你可以保持在调用闭合的轨道位置数registerHelper 。 下面是如何注册一个帮手被调用的例子position应该与你的模板实例工作。

JavaScript的:

// Using a self-invoking function just to illustrate the closure
(function() {
    // Start at 1, name this unique to anything in this closure
    var positionCounter = 1;

    Handlebars.registerHelper('position', function() {
        return positionCounter++;
    });

    // Compile/render your template here
    // It will use the helper whenever it seems position
})();

这里是一个的jsfiddle证明: http://jsfiddle.net/willslab/T5uKW/1/

虽然佣工在记录handlebarsjs.com ,这花了一些努力,我要弄清楚如何使用它们。 感谢您的挑战,我希望帮助!



Answer 4:

只有你必须使用{{@index}}

例:

{{#.}}
<li class="order{{@index}}"> counter: {{@index}}</li>
{{/.}}


Answer 5:

这是我的首选解决方案。 注册扩展的背景下,以自动包括您的位置属性的辅助工具。 然后,只需使用新的块帮手(前。#iter),而不是#each。

Handlebars.registerHelper('iter', function (context, options) {
    var ret = "";

    for (var i = 0, j = context.length; i < j; i++) {
        ret += options.fn($.extend(context[i], {position: i + 1}));
    }

    return ret;
});

用法:

{{#iter names}}
    {{position}}
    {{name}}
{{/iter}}

改编自http://rockycode.com/blog/handlebars-loop-index/



Answer 6:

你可以从列表内指数获得价值。

{{#each list}}
    @index
{{/each}}


文章来源: Counter for handlebars #each