2012-03-30 4 views
6

Aplikacja szkieletowa, którą rozwijam, ma kolekcję i model oraz powiązane widoki dla każdego elementu.Zdarzenia kręgosłupa podczas wypalania modelu podczas kolekcjonowania (Podwójne uruchamianie)

https://gist.github.com/2255959

Kiedy klikam na PostView niespodziewanie Zdarzenie na zbiorach bez żadnego okablowania.

Doszedłem do wniosku, że muszę powiązać wydarzenie z modelem, a następnie ogłosić wydarzenie w kolekcji. Czy tak nie jest? Czy kolekcja automatycznie dziedziczy zdarzenia uruchamiające jej modele potomne?

Jestem niepewny, ale myślę, że ma to coś wspólnego z zagnieżdżonymi widokami, i być może zdarzenie jest związane z obydwoma miejscami, a nie tylko z wewnętrznym el.

Odpowiedz

14

Z fine manual:

Każde wydarzenie, które jest wyzwalane na model w kolekcji pojawią się również wyzwalane w sprawie zbierania bezpośrednio, dla wygody.

Tak, więc kolekcja nasłuchuje zdarzeń we wszystkich modelach i przekazuje je dalej.

Na przykład, biorąc pod uwagę prosty zestaw się tak:

class M extends Backbone.Model 

class C extends Backbone.Collection 
    model: M 

c = new C 
c.on('change', (model, opts) -> console.log('Change on collection')) 

Doing c.first().set(...) wywoła obsługi zdarzeń.

Demo: http://jsfiddle.net/ambiguous/wwjnK/

+1

Wiesz, czy to może być stosowane odwrotnie? Więc wyzwalam zdarzenie w kolekcji, a następnie propaguję to zdarzenie do każdego obiektu modelu w kolekcji? – dombesz

+1

@dombesz: Myślę, że musiałbyś to zrobić ręcznie, ale metody podkreślenia zmieszane z kolekcjami powinny sprawić, że będzie to jedna linijka. –

+0

Właśnie się dowiedziałem, że jeśli wyzwolę zdarzenie na modelu, to samo zdarzenie zostanie uruchomione także w kolekcji. – dombesz