2013-03-27 54 views
2

我實際上玩弄了一些ember js,我很困惑,關於觀察者的行爲。一個觀察者在emberjs中被多次調用

App.ProjectView = Ember.View.extend({ 
    modelChanged: function() { 
     console.log('modelChanged to: '); 
     this.get('controller.model.images').forEach(function(item) { 
      console.log(item.get('src')); 
     }); 
    }.observes('controller.model.images') 
}); 

如果我訪問路由,這個觀察者被稱爲兩三次。但我不明白爲什麼,也找不到任何進一步的信息。

感謝您的任何幫助。

回答

3

隨着對象被創建和填充,最終可能會有觀察者發射多次。在上面的例子中,可能會創建model.images並將其設置爲undefined ... bam!觀察員觸發。然後將model.images的內容設置爲實際的空陣列... bam!觀察員觸發。然後內容開始填充數組...巴姆!嘭!嘭!多名觀察員可能會開槍。

有一些方法可以解決這個問題,比如只有在model.images長度大於0或定義的時候才使用它。如果您知道正在加載的數據的長度,則只能在匹配長度時處理觀察者。這些方法將根據您的應用程序的結構而有所不同。

+0

好的謝謝你的簡短解釋:)但現在我有另一個奇怪的事情...如果我通過鉻控制檯檢查對應的對象它是一個Ember.OrderedSet ...但它沒有有序集的方法這在api文檔中有所描述... – conscience 2013-03-27 21:55:10

+0

ember js中的整個模型是非常奇怪的...實際上,我嘗試使用模型中的數據創建幻燈片(上面的代碼是第一種方法)...所以另一個嘗試是一個行動,我通過圖像領域......它的作品,但只有在行動後第二次觸發......然後模型加載或什麼......我怎麼能處理這種與模型的異步恐怖?實現這樣一個簡單的目標? – conscience 2013-03-27 22:10:39

+0

如果您使用的是ember數據,我會掛鉤didLoad事件。這樣,每次將記錄加載到陣列上時都不會收到消息。 – 2013-03-27 22:35:52

相關問題