【问题标题】:How to find Array length inside the Handlebar templates?如何在 Handlebar 模板中查找数组长度?
【发布时间】:2013-03-03 22:36:26
【问题描述】:

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

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

现在在我的模板中,我想找到这个数组的长度。比如:

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

在 Handlebars 文档中找不到它。

【问题讨论】:

    标签: javascript templates handlebars.js


    【解决方案1】:

    我的坏....

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

    【讨论】:

    • 好吧,你让我免于测试它,所以谢谢。 :)
    • 这对于任何想知道的人来说至少对于 Mandrills 风格的车把不起作用。我还没有找到合适的替代品。
    【解决方案2】:

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

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

    【讨论】:

    • 我认为列表项是apple 0 3 orange 1 3 banana 2 3
    • @Paul,你是对的,更新示例以反映正确的输出。
    • 相关问题:当​​数组的长度为当前管道值时,如何获取数组的长度?
    • 从语法上讲,这个答案比公认的答案更有意义。
    • 这是一个很好的答案,应该被选为正确的答案!
    【解决方案3】:

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

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

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

    {{get_length some_object}}
    

    【讨论】:

    • length 是对象的属性,由于 Handlebars 支持点表示法,因此无需注册帮助器即可获取属性的值。
    【解决方案4】:

    如果您正在测试一个空列表以显示内容... 在使用把手的 Ember.js 中,您可以为 #each 设置 else。

    {{#each blah as |blah|}}
    
    {{else}}
     //   If array is empty
    {{/each}}
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2013-02-26
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-04-15
      • 2017-11-19
      • 1970-01-01
      相关资源
      最近更新 更多