2012-03-30 10 views
6

Una aplicación de Backbone que estoy desarrollando tiene una colección y un modelo, y vistas asociadas para cada elemento.Eventos de red troncal en el modelo de activación en la recopilación (doble activación)

https://gist.github.com/2255959

Cuando hago clic en el POSTVIEW, de forma inesperada, se activa el evento en la colección sin ningún tipo de cableado.

Pensé que tendría que vincular un evento al modelo, luego hacer que el fuego sea un evento en la colección. No es ese el caso? ¿Una colección hereda automágicamente los eventos activados por sus modelos secundarios?

No estoy seguro, pero creo que tiene algo que ver con las vistas anidadas, y quizás el evento esté vinculado en ambos lugares en lugar de solo en el interno el.

Respuesta

14

Desde el fine manual:

Cualquier evento que se desencadena en un modelo en una colección también se activará en la colección directamente, por conveniencia.

Así que sí, la colección escucha eventos en todos sus modelos y los reenvía.

Por ejemplo, dada una configuración sencilla como esto:

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

Haciendo c.first().set(...) activará el controlador de eventos.

Demostración: http://jsfiddle.net/ambiguous/wwjnK/

+1

¿Sabe usted si esto se puede aplicar a la inversa? Entonces, ¿activé un evento en una colección y luego propagué este evento a cada objeto modelo en la colección? – dombesz

+1

@dombesz: Creo que tendrías que hacer eso a mano, pero los métodos Underscore mixtos para las colecciones deberían hacer que sea un trazador de líneas rápido. –

+0

Acabo de descubrir que si desencadenar un evento en un modelo, el mismo evento se desencadenará en la colección también. – dombesz

Cuestiones relacionadas