[英]Ember.js: How do I determine if a property has really changed in an Observer?
[英]Ember.js: How do I prevent this property observer from being hit more than once?
在我的控制器中,我有一個屬性和一個觀察該屬性的函數。 當屬性更改一次時,觀察者將被擊中3次-用舊數據兩次,用新數據一次。 您可以在剛剛創建的jsbin的控制台窗口中看到它的發生:
用法:單擊其中一本書(不是第一本書),然后在控制台窗口中查看結果。
在我的實際應用中,要執行的工作需要異步下載。 由於三擊,該觀察者兩次下載了錯誤的內容,一次下載了正確的內容。 使這個問題更加明顯的是異步響應不會按順序返回。 :)
臨時解決方案是安排下載代碼在以后運行。
我不確定為什么會這樣,但是指南提供了一種解決方法。 他們建議如下:
bookObserver: function() {
Ember.run.once(this, 'bookWasChanged');
}.observes('book'),
bookWasChanged: function() {
// This will only run once per run loop
}
就我個人而言,我總是假設觀察者即使在我不希望他們射擊的情況下也可以解雇。 例如,使用此代碼,我將執行以下操作:
bookObserver: function() {
var book = this.get('book');
var lastBook = this.get('lastBook');
if (book !== lastBook) {
this.set('lastBook', book);
doSomethingWithBook(book);
}
}.observes('book')
這樣,即使Ember打電話給您的觀察員1000次,您也只會在書實際更改時去做您想要的工作。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.