2012-09-15 16 views
5

W jednym z moich poglądów mam:wydarzenia szkieletowe nie są wiążące do elementu DOM

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

następnie:

doSomething: function(){ 
    ... 
}, 

To powtarzający się struktura w moich poglądów, ale z jakiegoś powodu „doSomething "funkcja nie jest uruchamiana przez kliknięcie w tym widoku.

Kiedy elementy są powiązane ze zdarzeniem?

Jakieś wskazówki dotyczące debugowania tego?

Odpowiedz

6

Delegacja dzieje się podczas metody delegateEvents na końcu konstruktora widoku.

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

Spróbuj ręcznie wywołanie this.delegateEvents() wewnątrz render przed powrotem this. Czy jesteś w stanie uzyskać this.el w swoich metodach initialize lub render w sposób, który nie oczekuje szkieletu?

+1

Hm, właśnie próbowałem wywoływać this.delegateEvents() przed zwróceniem w renderowaniu, ale nadal nie wiąże tych zdarzeń. Poza tym nie mam nic wspólnego z plikiem this.el wewnątrz ani inicjowania ani renderowania. Jedyną rzeczą, która zadziałała, było wywołanie var that = this; this. $ ('. tab'). on ('click', function() {that.doSomething();}); wewnątrz inicjalizacji, ale to wydaje się być złą formą ... – captDaylight

+0

Nie miałem nic wspólnego z $ el lub el albo, ale dodanie delegateEvents do mojego renderowania naprawiło wiązanie zdarzeń. – Duke

10

link, aby bawić tutaj: http://jsfiddle.net/7xRak/

Pominięcie selektor powoduje zdarzenie być zobowiązany do elementu głównego widoku'S (this.el).

jeśli class="tab" jest elementem widoki DOM oznacza this.el wówczas należy powiązać zdarzenie jako

events : { 
    'click' : 'dosomething' 
} 

i dla wewnętrznego elementu this.el jak

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

wówczas należy powiązać zdarzenie jako,

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

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

+2

To jest dokładnie to, co pokazuję powyżej, jestem świadomy tego wzoru. Próbuję powiedzieć, że ten wzorzec z jakiegoś powodu nie działa, więc jakie są sposoby debugowania delegacji wydarzenia. – captDaylight

Powiązane problemy