2012-03-30 5 views
6

Un'app Backbone che sto sviluppando ha una collezione e un modello e viste associate per ciascun articolo.Eventi di backbone sulla cottura del modello alla raccolta (doppia cottura)

https://gist.github.com/2255959

Quando clicco sul postview, inaspettatamente, l'evento per la raccolta senza alcun cablaggio.

Ho pensato che avrei dovuto associare un evento al modello, quindi attivare un evento nella raccolta. Non è questo il caso? Una collezione eredita automagicamente eventi ha licenziato i suoi modelli figlio?

Sono incerto, ma penso che abbia qualcosa a che fare con le viste nidificate, e forse l'evento è vincolato su entrambi i posti invece del solo interno el.

risposta

14

Dal fine manual:

Qualsiasi evento che viene attivato su un modello in una collezione sarà anche attivato sulla raccolta diretta, per convenienza.

Quindi sì, la raccolta ascolta gli eventi su tutti i suoi modelli e li inoltra.

Per esempio, dato un insieme semplice come questo:

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')) 

Facendo c.first().set(...) attiverà il gestore di eventi.

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

+1

fai a sapere se questo può essere applicato inversamente? Quindi faccio scattare un evento in una raccolta e poi propagando questo evento a ciascun oggetto del modello nella raccolta? – dombesz

+1

@dombesz: Penso che dovresti farlo a mano ma i metodi Underscore mescolati con le collezioni dovrebbero renderlo veloce. –

+0

Ho appena scoperto che se faccio scattare un evento su un modello, lo stesso evento verrà attivato anche sulla raccolta. – dombesz

Problemi correlati