2017-06-01 43 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