我的属性sum
取决于3种不同的属性(在模型中)。我还有一个依赖于sum
的其他属性。 isZero
和sum
在模板{{isZero}} {{sum}}
中有绑定。
这是我的简化代码:
sum: function () {
console.log('sum is', this.get('p1') + this.get('p2') + this.get('p3'));
return this.get('p1') + this.get('p2') + this.get('p3');
}.property('p1', 'p2', 'p3'),
p1: function () {
console.log('update p1');
return _data.p1;
}.property('data'),
p2: function () {
console.log('update p2');
return _data.p2;
}.property('data'),
p3: function () {
console.log('update p3');
return _data.p3;
}.property('data'),
data: {},
_data: {p1: 1, p2: 2, p3: 3},
isZero: function () {
console.log('sum in isZero is', this.get('sum'));
return this.get('sum') === 0;
}.property('sum'),
updateData: function () {
this._data = {p1: 0, p2: 0, p3: 0};
this.notifyPropertyChange('data');
}
有时,当我更新数据时,sum
和isZero
未正确更新。如果我拨打updateData()
,这些是控制台中的打印件:
> update p1
> sum is 5
> sum in isZero is 5
> update p2
> update p3
> sum is 0
正如您所看到的,isZero
不再更新,sum
更新两次。我的模板将显示isZero false和sum 0。
我知道这段代码看起来很疯狂,但它是我能从我的问题中得到的最接近的代码。我试图在ember jsbin中重现,不幸的是它在那里正常工作。
任何人都有任何想法为什么会这样?
ps:updateData
调用在ember运行循环中。我正在使用ember 1.9.1版。