2012-09-15 22 views
5

In uno dei miei punti di vista che ho:eventi Backbone non vincolante per elemento DOM

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

poi:

doSomething: function(){ 
    ... 
}, 

tratta di una struttura ricorrente in mio punto di vista, ma per qualche motivo il 'doSomething 'la funzione non viene attivata dal clic in questa vista.

Quando gli elementi vengono associati all'evento?

Qualche consiglio sul debug di questo?

risposta

6

La delega avviene durante il metodo delegateEvents alla fine del costruttore di viste.

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

Prova manualmente chiamando this.delegateEvents() all'interno render prima di tornare this. Stai svanendo con this.el all'interno dei tuoi metodi initialize o render in un modo che il backbone non si aspetta?

+1

Hm, ho appena provato a chiamare this.delegateEvents() prima del ritorno nel rendering ma non associa ancora gli eventi. Inoltre, non sto scherzando con this.el all'interno dell'inizializzazione o del rendering. L'unica cosa che funzionava era chiamare var that = this; questo $ ('tab. ') il (' click', function() {that.doSomething();})..; all'interno dell'inizializzazione, ma questa sembra una brutta forma ... – captDaylight

+0

Non stavo scherzando con $ el o el, ma aggiungendo delegateEvents al mio rendering ho corretto l'associazione degli eventi. – Duke

10

collegamento in violino qui: http://jsfiddle.net/7xRak/

Omettendo il selettore causa l'evento di essere vincolato all'elemento radice della visualizzazione (this.el).

se il class="tab" è elemento di vista DOM significa this.el allora si dovrebbe associare evento come

events : { 
    'click' : 'dosomething' 
} 

e per elemento interno in this.el come

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

allora si dovrebbe associare evento come,

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

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

+2

Questo è esattamente quello che sto mostrando sopra, sono ben consapevole di questo schema. Quello che sto cercando di dire è che questo modello per qualche motivo non funziona, quindi quali sono alcuni modi per eseguire il debug della delega degli eventi. – captDaylight