【问题标题】:Handlebars using expression in a expression在表达式中使用表达式的车把
【发布时间】:2013-04-29 19:27:39
【问题描述】:

我有一个如下所示的车把模板:

<tr>
{{#each columns}}
    <th>
        {{name}}
    </th>
{{/each}}
</tr>

{{#each items}}
    <tr>
        {{each columns}}
            <td>
                {{! I want the items statusString field here for example }}
                {{../dataField}}
            </td>
        {{/each}}
    </tr>
{{/each}}

这个模板的输入看起来有点像这样:

columns = [
    {name: 'status', dataField: 'statusString'},
    {name: 'name', dataField: 'name'}
]

items = [
    {status: 1, statusString: 'Active', name: 'item 1'},
    {status: 1, statusString: 'Active', name: 'item 2'},
    {status: 0, statusString: 'Disabled', name: 'item 3'},
    {status: 1, statusString: 'Active', name: 'item 4'}
]

在模板中,我想迭代每一列并为每个项目显示与每一列对应的数据。但是我如何在车把上做到这一点?我试过像{{../{{dataField}}{{{{dataField}}}} 这样的表达式,但我什么也做不了。 我在 ember.js 中使用把手。

【问题讨论】:

    标签: ember.js handlebars.js


    【解决方案1】:

    这可以简单地通过使用助手来完成

    Handlebars.registerHelper('helper', function(fieldname, item) {
      return item[fieldname];
    });
    

    另一种方法是使用对象迭代器,它一直是recently added by handlebars。你可以像这样遍历一个对象

    var data = {"a": {"test":"test", "test2":"test2"}};
    

    有模板

    {{#each a}}
        {{@key}} - {{this}},
    {{/each}}
    

    会打印出“test - test, test2 - test2”。如果您编辑了数据,您可以使用它获得正确的输出。

    这是jsfiddle showing both of these

    【讨论】:

    • 我对你的小提琴进行了一点修正,以使这个示例再次可用,你在这里:jsfiddle.net/XVCrC/1
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2015-06-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-03-05
    • 1970-01-01
    相关资源
    最近更新 更多