Ember计算属性来自模型数组

时间:2015-10-20 18:24:47

标签: ember.js ember-data

我有一个带有财产"费用"

的模型
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}}

我是否遗漏了计算属性的写法?

1 个答案:

答案 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() {...});