我想我正面临一个关于将值直接设置为计算属性的错误,当它的相关键再次更改时,它似乎会破坏计算,这里有一个例子:
o = Ember.Object.extend({
v1: null,
v2: function (){
console.log('evaluation of v2', arguments);
return this.get('v1') + '!!!';
}.property('v1'),
v1_Observer: function () {
console.warn('v1 changed:', this.get('v1'));
}.observes('v1'),
v2_Observer: function (){
console.info('v2 changed:', this.get('v2'));
}.observes('v2')
});
oi = o.create();
oi.set('v1', 'Value v1 one');
oi.set('v2', 'Value direct to v2');
oi.set('v1', 'Value v1 two');
Ember.assert('v2 should be "Value v1 two!!!"', oi.get('v2') === (oi.get('v1') + '!!!'));
我认为这里有2个错误:
一切正常,直到我直接使用“set”更新计算属性 v2,当我再次更新 v1 时,不会重新评估 v2。
当直接设置 v2 时,它的观察者被调用了两次!
根据文档http://emberjs.com/guides/object-model/computed-properties/我们可以直接使用“set”设置计算属性的值,女巫将使用 2 个参数(键、值)调用!但在我的测试中,当 v1 第一次更改时,属性 v2 只会触发一次。
这是控制台的输出:
evaluation of v2 ["v2"]
v2 changed: Value v1 one!!!
v1 changed: Value v1 one
v2 changed: Value direct
v2 changed: Value direct
v1 changed: Value v1 two
Assertion failed: v2 should be "Value v1 two!!!"