Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/ember.js/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ember.js 计算机属性未在上更新_Ember.js_Ember Data - Fatal编程技术网

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.[]')
});