4

我有一个看起来像这样的车把模板:

<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 中使用把手。

4

1 回答 1

3

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

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

另一种方法是使用对象迭代器,它最近由 handlebars 添加。您可以像这样遍历对象

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

用模板

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

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

这是一个显示这两个的 jsfiddle

于 2013-04-30T01:09:44.960 回答