2012-01-25 96 views
0

我有這樣一個視圖對象的意見收集的屬性的屬性:如何獲得計算上

App.ThingView = Ember.View.extend({ 
    things: App.thingsController, 
    weightBinding: 'content.weight', 
    unitConversionFactorBinding: 'App.thingsController.unitConversionFactor', 

    percentWeight: function() { 
     var weight = this.getPath('content.weight'); 
     var totalWeight = this.getPath('things.totalWeight'); 
     return (weight/totalWeight) * 100; 
    }.property('content.weight', 'things.totalWeight'), 

    weightUnits: function() { 
     var weight = this.getPath('content.weight'); 
     var unitConversionFactor = this.get('unitConversionFactor'); 
     return weight * unitConversionFactor; 
    }.property('content.weigth', 'unitConversionFactor'), 

}); 

而這一觀點被用於迭代控制器陣列,像這樣:

{{#each App.thingsController tagName="ul"}} 
    {{#view App.ThingView contentBinding="this"}} 
      {{weight}} - {{percentWeight}} % - {{weightUnits}} 
      {{#view deleteButton}}Delete{{/view}} 
    {{/view}} 
{{/each}} 

我想顯示總計weigthUnits,基本上遍歷#each助手呈現的視圖並添加它們。這可能嗎?或者是否需要恢復將所有這些計算的屬性邏輯放入模型中(以便從控制器訪問聚合計算)?我已經設置了這裏的jsfiddle: http://jsfiddle.net/sohara/MuwDd/19/

回答

0

如何:http://jsfiddle.net/tomwhatmore/fqR8W/1/

在匆忙的權利,但我認爲爵士小提琴覆蓋呢?如您所述,將weightUnit邏輯移至模型中。

+0

感謝您的建議,但出於幾個原因,我需要將該邏輯保留在模型之外。一個是我的計算函數中還有其他的依賴關係,這些依賴關係並不在這個簡化的例子中,而是依賴於系統中的控制器和其他對象。另一種情況是,一般來說,模型對象不應該知道它所屬的控制器的狀態......我想可能是mvc違規。 –

+0

我更新了jsfiddle:http://jsfiddle.net/sohara/MuwDd/52/並嘗試使用視圖對象上的觀察者來更新控制器上的屬性...可能是反模式,但我看不到在這種情況下,我可以避免使用反模式...哦。 –

+0

啊,沒有看到你的迴應。我認爲它可能在簡化中缺少一些東西,最後依靠控制器的模型會非常糟糕。你的解決方案確實看起來像一個小螞蟻模式,但如果它有效,那麼比我想象的要好。 –