【发布时间】:2016-01-19 13:13:26
【问题描述】:
我有一个具有“费用”属性的模型
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}}
我在计算属性的编写方式上遗漏了什么吗?
【问题讨论】:
-
把 DS.attr('string') 改成 DS.attr('number') 有效果吗?
-
不,它不会改变结果。问题实际上是它无法识别属性的变化,无论它是字符串还是数字。
-
代码对我来说看起来不错,尽管我在这里看到问题在升级 ember 后提到了类似的问题。如果你真的很绝望,你可以试试
Ember 2.0。我能提供的唯一提示是,您可以使用 reduce 计算 sum 和类似的东西,并且基本上使计算函数单线。 -
我已将您的代码放入 Ember Twiddle 中,它似乎工作得很好。也许您没有在模板中显示
feeTotal?计算属性仅在请求其值时才会被计算,例如在模板中或使用get()。 -
为了澄清这里是我写的代码:gist.github.com/jonkoops/063663240a76de9e65a2
标签: ember.js ember-data