2015-02-05 87 views
0

隨着Ember 2.0進入管道並遠離itemControllers &視圖,將選定類應用於當前選定的tr元素的最佳方式是什麼?在tr元素上更改tr元素上的類後

最初只有控制器模板中的每個循環都在每個tr元素上設置itemControllers。 itemController然後將保存isSelected屬性,並在選擇後將其提升到parentController

選擇當前正在工作沒有問題與pumpSelected綁定到傳遞到組件的屬性。

雖然代碼在重構之後有點清潔,但它只是將itemController的需要推給了我。任何幫助讚賞。

組件.hbs片段:

{{#each pump in results}} 
    <tr {{action 'select' pump}} {{bind-attr class='isSelected:selected'}}> 
    <td>{{pump.modelNumber}}</td> 
    </tr> 
{{/each}} 

組件定義:

PumpResultComponent = Ember.Component.extend 
    tagName: 'table' 
    classNames: ['table', 'table-striped'] 

    actions: 
    select: (selectedPump)-> 
     @set 'pumpSelected', selectedPump 

回答

1

我現在這樣做的權利的方式是通過包裝在一個列表中的內容,並在每個定義選擇狀態項目。在您的模板,你可以比遍歷這個包裝清單,所以你的情況:

PumpResultComponent = Ember.Component.extend({ 
    pumpList: function() { 
     var selected = this.get('pumpSelected'); 
     return this.get('results').map(function(pump) { 
      return { 
       isSelected: selected && pump.get('id') === selected.get('id'), // or some other equality property 
       pump: pump 
      }; 
     }); 
    }.property('pumpSelected','results') 
}); 

{{#each item in pumpList}} 
    <tr {{action 'select' item.pump}} {{bind-attr class='item.isSelected:selected'}}> 
     <td>{{item.pump.modelNumber}}</td> 
    </tr> 
{{/each}} 
+0

我沒有找到一個[主題](http://discuss.emberjs.com/t/what-is-a-good -o-way-to-do-this-in-ember-2-0-no-itemcontroller-no-arraycontroller/66490),它在發佈後討論與此非常相似的事物。看起來很明顯看過>。< - 感謝您的一個很好的答案。 – al3xnull 2015-02-06 13:39:50