2013-04-29 48 views
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中的句柄。

回答

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}} 

會打印出 「測試 - 測試,測試2 - TEST2」。如果你編輯你的數據,你可以通過使用這個來獲得正確的輸出。

繼承人a jsfiddle showing both of these

+0

我對你做了一點小小的修改,讓這個示例再次可用,這裏你是:http://jsfiddle.net/XVCrC/1/ – AuthorProxy 2013-08-15 20:45:48