使用表达式的把手在表达式

时间:2013-04-29 19:27:40

标签: ember.js handlebars.js

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

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

1 个答案:

答案 0 :(得分:3)

只需使用帮助

即可完成
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