【发布时间】:2016-04-22 08:45:48
【问题描述】:
我正在开发一个具有 2 个模型的简单预算应用程序:类别和条目。类别有很多条目。
灰烬 2.2
问题: 类别有计算属性 total 和 difference 来监视相关条目。这些计算属性会在添加和删除条目时更新,但不会在条目属性更改时更新。
这是类别模型:
# app/models/category.js
export default DS.Model.extend({
name: DS.attr('string'),
budgetAmount: DS.attr('number'),
budgetSheet: DS.belongsTo('budget-sheet'),
entries: DS.hasMany('entry'),
total: Ember.computed('entries.@each.amount', {
get() {
let entries = this.get('entries');
return entries.reduce(function(previousValue, entry){
return previousValue + entry.get('amount');
}, 0);
}
}),
difference: Ember.computed('budgetAmount', 'total', {
get() {
return this.get('budgetAmount') - this.get('total');
}
})
});
路线如下:
# app/routes/budget-sheet.js
export default Ember.Route.extend(AuthenticatedRouteMixin, {
model(params) {
return this.store.find('budget-sheet', params.budgetSheetId);
},
setupController(controller, model) {
controller.set('budgetSheet', model);
controller.set('categories', model.get('categories'));
}
});
这是具有添加/删除/更新条目操作的控制器:
# app/controllers/budget-sheet.js
export default Ember.Controller.extend({
entries: Ember.computed('categories.@each.entries', {
get() {
let result = [];
this.get('categories').map(function(category) {
category.get('entries').forEach(function(entry) {
return result.push(entry);
});
});
return result;
}
}),
actions: {
...
updateEntry(id, attribute, value) {
let entry = this.store.peekRecord('entry', id);
entry.set(attribute, value);
entry.save();
},
deleteEntry(id) {
let entry = this.store.peekRecord('entry', id);
entry.destroyRecord();
}
}
});
模板遍历categories 并显示计算的属性。该模板还有一个entry-form 组件,负责向控制器中的函数发送数据(addEntry、updateEntry)。
添加或删除条目时,模板会更新。当条目的类别更改时,模板会更新。更新条目的金额时,模板不会更新。
【问题讨论】:
-
我不知道,您使用的是哪个 ember 版本,但您尝试过:
total: Ember.computed('entries.[].amount',吗? -
感谢您的推荐。我在 Ember 2.2 上。我确实尝试将计算属性更新为
entries.[].amount,但这并没有解决属性不更新的问题。
标签: ember.js ember-data