2
我遇到了一些與Ember屬性觀察員發生的不尋常行爲。請參見本jfiddle的代碼在行動:http://jsfiddle.net/sBVtJ/3/Ember.js屬性觀察者異常行爲
- 當觀察者觀看兩個屬性,將兩次當兩個屬性都同時更新解僱。
- 當一個觀察者在另一條路線的控制器上設置時,它將不會開始發射,直到該路線處於活動狀態(預期)。但是當離開那條路線時,觀察者將繼續射擊(不打算)。
有關行爲2的更多討論:首次加載應用程序時,您可以單擊「更改多個屬性操作」,屬性將開始遞增。但是觀察員不被解僱。現在導航到觀察者路線。當你增加屬性時,觀察者將會觸發。然後導航回到索引路線。觀察員將繼續着火財產增量。現在,每次從任一路線增加屬性時,觀察者都會被觸發。我的預期行爲是當觀察者路線激活時,只讓觀察員開火。任何方式來實現這一目標?
而且我的行爲1問題:請注意,觀察者閃光兩次每當屬性被更新,即使兩者同時更新。當同時更新兩個屬性時,是否可以讓觀察者只觸發一次?
App = Ember.Application.create();
App.Router.map(function(){
this.resource('observer');
});
App.Router.reopen({location:'none'});
App.ApplicationController = Ember.Controller.extend({
consoleProp: function(){
console.log(this.get('controllers.application.prop1'));
},
changeTwoProperties: function(){
this.get('controllers.application').incrementProperty('prop1');
this.get('controllers.application').incrementProperty('prop2');
},
prop1:0,
prop2:0
});
App.IndexController = Ember.Controller.extend({
needs: ['application'],
changeTwoPropertiesBinding: 'controllers.application.changeTwoProperties',
consolePropBinding: 'controllers.application.consoleProp'
});
App.ObserverController = Ember.Controller.extend({
needs: ['application'],
changeTwoPropertiesBinding: 'controllers.application.changeTwoProperties',
consolePropBinding: 'controllers.application.consoleProp',
theObserver: function(){
console.log('observer fired');
}.observes('controllers.application.prop1', 'controllers.application.prop2')
});
Shimon:我有類似的問題。我嘗試了一切,包括與'Ember.run'溝通,但無濟於事。如果'hasChanged'方法在所有3完成更新後才執行一次,那將會很好:http://jsfiddle.net/V29Nu/1/ – Wildhoney
@Wildhoney我不認爲你可以觀察到3(或更多1)不同的控制器作爲單個更改。 –