我有一个带有财产"费用"
的模型fees: DS.hasMany('fee')
以及具有财产"金额"
的费用模型amount: DS.attr('string')
在我的控制器中我想要一个计算属性,将所有费用金额加起来,所以我有这个
feeTotal: Ember.computed('model.fees.@each.amount', function() {
var total = 0;
this.get('model').get('fees').forEach(function(fee) {
total += Number(fee.get('amount'));
});
return total;
})
这将首先计算费用,并在添加新费用时重新计算,但是当费用金额发生变化时,它不会重新计算。例如,更改以下输入字段将更新金额,但不会更新计算的总金额。
{{#each model.fees as |fee|}}
{{input value=fee.amount type="number" placeholder="Fee Amount"}}
{{/each}}
我是否遗漏了计算属性的写法?
答案 0 :(得分:0)
添加新费用后,您应添加'model.fees.length'属性以更新totalAmount。
Ember.computed('model.fees.length', 'model.fees.@each.amount', function() {...});
我有一些你可以尝试的想法:
- 使用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表示“脏”值
Ember.computed('model.fees.length', 'model.fees.@each.amount', 'model.fees.@each.isDirty', function() {...});