我有一个Ember对象如下:
App.Basket = Ember.Object.extend({
items: [],
numItems: function () {
return this.items.length;
}.property('items'),
addItem: function (item) {
this.items.push(item);
window.console.log(this.items.length, this.get('items').length, this.numItems);
}
});
App.userBasket = App.Basket.create({
items: [{name: 'testing'}]
});
它在模板中绑定:
{{App.userBasket.numItems}}
通过在create上填充items数组来正确显示初始值。
但是,我有一个调用App.userBasket.addItem({name: 'testing2'});
的按钮。
在控制台中,返回正确的计数。但是,视图不会更新。这是为什么?
答案 0 :(得分:4)
您需要将items.[]
添加到计算属性依赖项中。否则它只会观察像basket.set('items', someItems)
这样的数组赋值的变化,你还想观察数组本身的变化:
numItems: function () {
return this.items.length;
}.property('items', 'items.[]'),
items.push
是来自Array
的原生方法,ember添加一个名为pushObject
的方法,其行为与push
相同,但会通知观察者。这需要numItems
了解items
属性
addItem: function (item) {
this.items.pushObject(item);
window.console.log(this.items.length, this.get('items').length, this.numItems);
}