2014-02-26 251 views
4

我想要使用emberjs模板呈现表格。该表应解决的列进行动态渲染:通过变量名称获取属性

<table> 
    {{#each item in this.items}} 
     <tr> 
      {{#each colName in this.columnNames}} 
       <td>{{item.[colName]}}</td> 
      {{/each}} 
     </tr> 
    {{/each}} 
</table> 

不过,我认为车把试图访问一个项目的属性colName。我如何动态访问属性?

+1

'this'是当前的上下文,因此,如您所说,它是一个项目。但是,您可以使用'with'更改模板中的作用域,这里是链接:http://emberjs.com/guides/templates/changing-scope/ – fanta

回答

2

更新:由于Visualize在评论中指出,现在有一个native get helper。你应该更喜欢在下面的实现(可能不与Ember的较新版本的正确更新。)


我不知道,如果把手是能够动态地解决这样的一个变量(至少出来的框)。我可能会写我自己的帮手。

Ember.Handlebars.helper('getProperty', function(object, property, options) { 
    return Ember.get(object, property); 
}); 

然后在你的模板:

{{#each item in items}} 
    <tr> 
    {{#each colName in columnNames}} 
     <td>{{getProperty item colName}}</td> 
    {{/each}} 
    </tr> 
{{/each}} 

如果我的灰烬绑定的理解是正确的,助手应该重新渲染任何时候itemcolName改变。

+0

绑定不会考虑使用此方法,因此您的值重新抓取在更改时不会更新。从Ember 2.1.0开始,你可以在模板中使用本地的'get'helper来处理这个问题。 http://emberjs.com/api/classes/Ember.Templates.helpers.html#method_get – Visualise