如何在车把模板中找到数组长度?


86

我有一个使用json对象呈现的Handlebars模板。在这个json中,我正在发送一个数组。像这样:

var json = {
               "array":["abc","def","ghi","jkl"] 
}

现在在我的模板中,我想找到此数组的长度。就像是:

{{#each item}}
   {{ array.length }}
{{/each}}

在车把文档中找不到它。

Answers:


189

我的错....

{{array.length}}实际上在模板内部工作。在将其发布到此处之前,应该已经对其进行了检查/测试。


37
好吧,您使我不必进行测试,所以谢谢。:)
Perry Tew

8
至少对于任何想知道的人来说,这对于Mandrills风格的车把都不起作用。我尚未找到合适的替代品。
oneirois

43

在这种情况下,您需要从每个块中引用每个的父变量:

{{#each array}}
    {{../array.length}}
{{/each}}

我认为将您的变量命名为“数组”也可能会混淆该问题。让我们假设一些不同的JSON来说明一下:

var json = {
    "fruit":["apple","orange","banana"]
};

因此,这样做:

<ul>
    {{#each fruit}}
        <li>{{this}} {{@index}} {{../fruit.length}}</li>
    {{/each}}
</ul>

将产生:

<ul>
    <li>apple 0 3</li>
    <li>orange 1 3</li>
    <li>banana 2 3</li>
</ul>

1
我认为清单中的内容是apple 0 3 orange 1 3 banana 2 3
Paul

@Paul,您是正确的,示例已更新以反映正确的输出。
凯文·鲍威尔

相关问题:当​​数组为当前管道值时,如何获取数组的长度?
Gyscos 2015年

从句法上讲,此答案比已接受的答案更有意义。
尼尔·梦露,

2

您可以定义简单的助手来处理它:

Handlebars.registerHelper('get_length', function (obj) {
 return obj.length;
});   

然后在您的模板中使用它,例如:

{{get_length some_object}}

1

如果您要测试一个空列表以显示内容,请执行以下操作:在使用把手的Ember.js中,您可以为#each使用其他元素。

{{#each blah as |blah|}}

{{else}}
 //   If array is empty
{{/each}}
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.