簡體   English   中英

Ember.js:如何防止多次擊中該屬性觀察器?

[英]Ember.js: How do I prevent this property observer from being hit more than once?

在我的控制器中,我有一個屬性和一個觀察該屬性的函數。 當屬性更改一次時,觀察者將被擊中3次-用舊數據兩次,用新數據一次。 您可以在剛剛創建的jsbin的控制台窗口中看到它的發生:

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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM