2017-06-01 95 views
0

我尝试观察(在我的控制器中)我的Ember模型是否已更改。观察Ember的dirtyType属性时的好奇行为

personChanged: function() { 
    // do stuff 
}.observes('person.dirtyType'), 

这名观察员从未triggerd除非我将之前访问isDirty属性。例如,如果I get路线中的属性(模型被提取),观察者将被精确触发1次。

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'), 

总是如预期的dirtyType在观测值。

也许我做的完全错了,但我不能按照上面的行为。

回答

0

也有一些是不可预知的事情,当我们使用firstObject基于这个问题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 
}), 
+0

这对我不起作用,对不起。 – Fabic

+0

未消耗的计算属性不触发观察者[引用](https://guides.emberjs.com/v2.13.0/object-model/observers/#toc_unconsumed-computed-properties-do-not-trigger-observers)。所以如果你不在模板里面使用'person',那么在init方法中考虑'this.get('person')'。 – kumkanillam

+0

我在我的模板中使用'person',但在init方法中也添加了this.get('person')'。问题依然存在。 – Fabic