2013-05-01 6 views
19

Zauważyłem, że przeliczalny mixin ma obliczone właściwości, które zależą od właściwości '[]', a tablice ember również mają właściwość '@each'.Jaka jest różnica między właściwością "[]" a własnością "@each" w pliku ember.js?

Jaka jest różnica między w zależności od '[]' i '@each'?

Moje ogólnikowe zrozumienie (popraw mnie, jeśli się mylę) jest to, że '[]' jest wyzwalane, gdy zawartość tablicy zostanie zastąpiona. Ale czy to jest inne niż w zależności od samej nieruchomości?

Rozważmy następujące klasy:

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

I utworzyć instancję w następujący sposób:

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

Poniższy:

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

wyzwala watcher1 i watcher2

oraz następujące:

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

wyzwala również watcher1 i watcher2

podobnie jak:

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

Więc jest jakaś różnica? Kiedy powinniśmy użyć jednego z drugim?

Dzięki! Kevin

Odpowiedz

25

Zastosowanie @each jeśli trzeba obserwować właściwości elementów tablicy

@each obsługuje właściwości elementów wewnątrz macierzy obserwacji. Na przykład [email protected]. Notacja nawiasów nie obsługuje tego. Oto jsbin demo.

to property of Array instances, który zwraca EachProxy instance, który obsługuje delegację. Z drugiej strony, [] po prostu returns this.

Zastosowanie [] jeśli jest to potrzebne do pracy non-Array enumerables

Według changelogu ember oznaczenie wspornik powstał Nieistniejący na rzecz @each w węgielek 0.9.4, ale następnie ponownie włączony 0.9.8 . The commit that re-enables it wskazuje, że [] może być używany do wyliczeń innych niż Arrayables, takich jak instancje Ember.Set. jsbin demo.

+0

Dzięki! Bardzo dokładny i jasny i doceniam jsins. –

+1

Obecna oficjalna dokumentacja - http://emberjs.com/api/classes/Ember.Array.html#property__each sprawia, że ​​całkiem jasne, kiedy używać. –

Powiązane problemy