我有一个非常简单的模型:
//models/build
import DS from 'ember-data';
export default DS.Model.extend({
shipments: DS.hasMany('shipment')
});
每当添加或删除新货件时,我都需要更新计算机属性,因此我正在使用我的控制器,如下所示:
//controllers/build
import Ember from 'ember';
export default Ember.Controller.extend({
init: function() {
this.get('allShips');
this.get('ships');
},
allShips: Ember.computed.alias('model.shipments'),
ships: function() {
console.log('updating ships');
}.property('model.@each.shipments')
});
我没有在我的模板中消耗计算机属性,我只需要让它们更新以进行一些计算工作,所以我只是将它们放在init函数中。当我正确进入构建路径时,我正在控制台中“更新船只”,但之后无论我添加或删除多少货物都不会更新。
我尝试过很多不同的属性,model.ships.@each
,allShips
,@each.allShips
,allShips.@each
以及几十种组合,但都是徒劳的。我从未遇到过计算机属性的这种麻烦,所以任何建议都会受到赞赏。
答案 0 :(得分:0)
@each
的展示位置不正确 - 应该在model.shipments
之后。
正如其中一条评论所述 - 如果您没有访问属性(例如model.shipments.@each.id
,那么您应该注意models.shipments.[]
。
由于某种原因,计算属性仅在返回数组时为我更新 - 不返回值或返回除数组之外的任何类型的值失败。
模型
//models/build
import DS from 'ember-data';
export default DS.Model.extend({
shipments: DS.hasMany('shipment')
});
控制器
//controllers/build
import Ember from 'ember';
export default Ember.Controller.extend({
init: function() {
this.get('allShips');
this.get('ships');
},
allShips: Ember.computed.alias('model.shipments'),
ships: function() {
var ships = this.get('model.shipments');
console.log('updating ships');
return [];
}.property('model.shipments.@each')
});
如果您没有返回值,最好观察model.shipments.[]
:
//controllers/build
import Ember from 'ember';
export default Ember.Controller.extend({
doShipsWork: function() {
console.log('updating ships');
}.observes('model.shipments.[]')
});