Ember.js 计算机属性未在上更新
我有一个非常简单的模型:Ember.js 计算机属性未在上更新,ember.js,ember-data,Ember.js,Ember Data,我有一个非常简单的模型: //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.Contr
//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
,以及数十种组合,但都是徒劳的。我从来没有遇到过这样的电脑性能问题,所以任何建议都将不胜感激 每个的位置不正确-应该在型号之后。装运
作为注释状态之一-如果您没有访问属性(例如,model.shippings.@each.id
那么您应该观察models.shippings.[]
)
出于某种原因,computed属性仅在返回数组时更新-不返回值或返回数组以外的任何类型的值失败
模型
控制器
//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.shippings.[]
:
//controllers/build
import Ember from 'ember';
export default Ember.Controller.extend({
doShipsWork: function() {
console.log('updating ships');
}.observes('model.shipments.[]')
});
您可能需要
.observes('model.shippings.[]')
-@每个用于观察阵列中各个项目的属性,例如装运。@each.location
。如果您不使用该属性,则应使用observes
(这将消除在init
中使用getter的必要性,因为观察是迫不及待的)这实际上是我的错误。我复制了错误的源代码。我尝试了model.shippings。@每个都不起作用。如何将装运对象添加到生成对象?this.get('controllers.build.model.shippings')。addObject(装运);
//controllers/build
import Ember from 'ember';
export default Ember.Controller.extend({
doShipsWork: function() {
console.log('updating ships');
}.observes('model.shipments.[]')
});