观察Ember的dirtyType属性时的奇怪行为

时间:2017-06-01 07:27:58

标签: ember.js ember-data

我尝试观察(在我的控制器中)我的Ember模型是否已经改变。

try {
  const foo = "bar"
} catch (e) {
  console.log(e)
}

try {
  console.log(foo) -> is not defined
} catch (e) {
  console.log(e)
}

除非我之前访问personChanged: function() { // do stuff }.observes('person.dirtyType'), 属性,否则永远不会触发此观察者。例如,如果我isDirty路由中的属性(获取模型的位置),观察者将被触发一次。

get

如果我想在每次模型更改时触发观察者,我需要再次访问观察者中的model.people.get('firstObject').get('dirtyType'); controller.set('person', model.people.get('firstObject'));

dirtyType

观察者中personChanged: function() { this.get('person.dirtyType'); // do stuff }.observes('person.dirtyType'), 的值始终如预期。

也许我完全错了,但我无法遵循上述行为。

1 个答案:

答案 0 :(得分:0)

当我们根据此问题Ember computed alias on array firstObject not working

使用controller.set('person', model.people.get('firstObject')); 时,会发生一些无法预测的事情。

我还没有经历过这样的确认。可能在此之前您可以尝试以下解决方法,

person:Ember.computed('model.people.[]',function(){
 return return this.get('model.people.firstObject');
})

您可以定义计算属性

,而不是上述内容
personChanged:Ember.observer('person.dirtyType',function() {
    // do stuff
}),

现在你的下方观察者将一直工作。

compile group: 'com.google.guava', name: 'guava', version: '21.0'