2015-10-20 67 views
0

我與財產「費」灰燼計算從模型數組屬性

fees: DS.hasMany('fee') 

,並與物業「量」

amount: DS.attr('string') 
在我的控制器

我要計算費用模型的模型財產,加起來的所有費用金額,所以我有這個

feeTotal: Ember.computed('[email protected]', function() { 
    var total = 0; 
    this.get('model').get('fees').forEach(function(fee) { 
    total += Number(fee.get('amount')); 
    }); 
    return total; 
}) 

這將計算費用最初,並recompu如果增加新費用,但在費用金額發生變化時不會重新計算費用。例如,更改以下輸入字段將更新金額,但不會計算總計。

{{#each model.fees as |fee|}} 
    {{input value=fee.amount type="number" placeholder="Fee Amount"}} 
{{/each}} 

我在計算屬性寫入的方式中缺少一些東西嗎?

+0

如果將DS.attr('string')更改爲DS.attr('number'),它會工作嗎? –

+0

不,它不會改變結果。問題在於它無法識別屬性的變化,無論它是字符串還是數字。 – cswright

+1

代碼對我來說看起來不錯,雖然我在這裏看到問題,在升級ember後提到類似的問題。如果你變得非常絕望,你可以嘗試'''Ember 2.0'''。我只能提供的是,您可以使用[reduce](http://emberjs.com/api/classes/Ember.Enumerable.html#method_reduce)計算總和和類似的東西,並基本上使計算函數成爲一行。 – Keo

回答

0

添加新費用後,您應該添加'model.fees.length'屬性以更新totalAmount。

Ember.computed('model.fees.length', '[email protected]', function() {...}); 

我有一些想法,你可以嘗試:

-bind收費模式到您的基本模型DS.belongsTo()

- 保存費會改變其值後

//template: 
<ul> 
    {{#each fees as |fee|}} 
    <li> 
     {{fee.amount}} - {{input type="number" value=fee.amount}} <button {{action 'save' fee}}>Save</button></li> 
    {{/each}} 
</ul> 

//controller 
actions: { 
    save(fee) { 
    fee.save(); 
    } 
} 

-watch for'dirty'values

Ember.computed('model.fees.length', '[email protected]', '[email protected]', function() {...}); 
+0

它不會改變任何東西,但如果這是一個更好的方式來寫它,我很感激 – cswright

+0

我更新了我的答案 – dex07

+0

爲什麼這些事情會有所作爲? – 2015-10-22 09:22:54