计算机属性未在hasMany上更新

时间:2015-06-06 00:30:13

标签: 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.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.@eachallShips@each.allShipsallShips.@each以及几十种组合,但都是徒劳的。我从未遇到过计算机属性的这种麻烦,所以任何建议都会受到赞赏。

1 个答案:

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