2014-02-26 292 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