2012-09-15 4 views
5

에 결합하지 내가 가진 : 다음백본 이벤트 내보기 중 하나에서 DOM 요소

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

:

doSomething: function(){ 
    ... 
}, 

이 내 의견에 반복되는 구조이지만, 몇 가지 이유 '해봐요 대한 '기능이이보기에서 클릭에 의해 실행되지 않습니다.

요소가 이벤트에 언제 바인딩됩니까?

디버깅에 대한 유용한 정보가 있습니까?

답변

6

위임은 뷰 생성자 끝의 delegateEvents 메서드에서 발생합니다.

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

this을 반환하기 전에 render 내부 this.delegateEvents()를 호출 수동으로 봅니다. 백본이 예상치 못한 방식으로 initialize 또는 render 방법 안에 this.el으로 퇴장하고 있습니까? 여기 바이올린

+1

흠, 나는 렌더링에서 반환되기 전에 this.delegateEvents()를 호출 해봤지만 아직 이벤트를 바인딩하지 않습니다. 또한, 나는 이걸로 장난하지 않고 있어요. 초기화 또는 렌더링 내부. 작동 한 유일한 것은 var = this라고 부릅니다. this.do ('. tab'). on ('click', function() {that.doSomething();}); 내부의 초기화,하지만 이것은 나쁜 형태처럼 느껴집니다 ... – captDaylight

+0

$ el 또는 el 중 하나를 엉망이 아니었지만 내 렌더링에 delegateEvents를 추가하면 이벤트 바인딩이 수정되었습니다. – Duke

10

링크 : 선택기를 생략 http://jsfiddle.net/7xRak/

이벤트가 뷰의 루트 요소 (this.el)에 바인딩됩니다. 당신의 class="tab" 인 전망의 DOM 요소가 this.el는 다음 다음과 같은 이벤트를 바인딩해야

events : { 
    'click' : 'dosomething' 
} 

로하고

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

같은 this.el의 내부 요소에 대한 이벤트를 바인딩해야 의미하는 경우

,

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

문서 : http://backbonejs.org/#View-delegateEvents

+2

위의 내용과 정확히 일치합니다.이 패턴을 잘 알고 있습니다. 제가 말하고자하는 것은 어떤 이유로이 패턴이 작동하지 않는다는 것입니다. 따라서 이벤트 위임을 디버깅하는 몇 가지 방법이 있습니다. – captDaylight

관련 문제