2012-09-15 14 views
5

En uno de mis puntos de vista que tengo:eventos Backbone no se une a elemento DOM

events: { 
    'click .tab': 'doSomething', 
}, 

a continuación:

doSomething: function(){ 
    ... 
}, 

Ésta es una estructura recurrente en mis puntos de vista, pero por alguna razón el 'doSomething 'la función no está siendo activada por el clic en esta vista.

¿Cuándo se vinculan los elementos al evento?

¿Alguna sugerencia para depurar esto?

Respuesta

6

La delegación ocurre durante el método delegateEvents al final del constructor de vista.

http://documentcloud.github.com/backbone/docs/backbone.html#section-144

Pruebe manualmente llamando this.delegateEvents() dentro render antes de regresar this. ¿Estás trabajando con this.el dentro de tus métodos initialize o render de una manera que la red troncal no está esperando?

+1

Hm, acabo de intentar llamar al this.delegateEvents() antes de la devolución en el procesamiento, pero aún no vincula los eventos. Además, no estoy jugando con this.el dentro de la inicialización o el renderizado. Lo único que funcionaba era llamar a var that = this; this. $ ('. tab'). on ('click', function() {that.doSomething();}); dentro de la inicialización, pero esto parece una mala forma ... – captDaylight

+0

No me estaba metiendo con $ el o el tampoco, pero al agregar delegateEvents a mi render corrigió el enlace del evento. – Duke

10

enlace que jugar aquí: http://jsfiddle.net/7xRak/

Omitiendo el selector hace que el evento se una a elemento raíz de la vista (this.el).

si su es elemento vistas DOM class="tab" significa this.el entonces debería obligar evento como

events : { 
    'click' : 'dosomething' 
} 

y para el elemento interno en this.el como

<div class="tab"> 
    <span class="inner"></span> 
</div> 

entonces usted debe unirse evento como,

events : { 
     'click' : 'dosomething' 
     'click .inner' : 'onInnerClick' 
    } 

documento: http://backbonejs.org/#View-delegateEvents

+2

Esto es exactamente lo que estoy mostrando arriba, soy muy consciente de este patrón. Lo que trato de decir es que este patrón, por alguna razón, no funciona, entonces, ¿cuáles son algunas formas de depurar la delegación del evento? – captDaylight