2013-05-01 132 views
19

我注意到可枚舉的mixin計算的屬性取決於'[]'屬性,而餘燼數組也具有'@each'屬性。ember.js中'[]'屬性和'@each'屬性有什麼區別?

根據'[]''@each'有什麼不同?

我的模糊理解(糾正我,如果我錯了)是'[]'是在數組內容被替換時觸發的。但是,這是不是取決於財產本身?

考慮下面的類:

C = Ember.Object.extend({ 
    things: null, 
    watcher1: (function() { 
    console.log('watcher1') 
    }).observes('things.[]'), 
    watcher2: (function() { 
    console.log('watcher2') 
    }).observes('[email protected]') 
}); 

我如下創建一個實例:

c = C.create({things: Ember.A(['a', 'b'])}); 

以下:

c.get('things').replace(0, 1, ['z']) 

觸發watcher1watcher2

及以下:

c.get('things').setObjects(['1', '2']) 

也觸發watcher1watcher2

一樣:

c.get('things').addObject('v') 

那麼,有什麼區別嗎?我們應該什麼時候使用一個與另一個?

謝謝! 凱文

回答

25

使用@each如果你需要觀察數組元素的性質

@each支持觀察數組中的元素的性質。例如,[email protected]。括號表示法不支持這一點。這是一個jsbin demo

@eachproperty of Array instances,它返回處理委託的EachProxy instance。另一方面,[]只需returns this

使用[]如果你需要它在非陣列工作可枚舉

根據餘燼的changelog,支架符號在灰燼0.9.4作出解散贊成@each,但隨後在0.9.8重新啓用。 The commit that re-enables it表示[]可用於非數組枚舉類型,如Ember.Set實例。 jsbin demo

+0

謝謝!非常徹底和清晰,我欣賞jsbins。 – 2013-08-14 19:33:46

+1

當前的官方文檔 - http://emberjs.com/api/classes/Ember.Array.html#property__each使得它很清楚何時使用哪個。 – 2015-06-02 04:41:23

相關問題