2012-04-17 3 views
8

이 코드에는 많은 컨텍스트가 없지만 내 질문을 설명 할 것입니다. 그것은 require.js를 통해로드하는 데 사용하는 AMD 모듈에 정의 된 백본보기입니다.초기화 후 backbone.js 이벤트 추가

기본적으로 초기화가 실행 된 후에 백본보기에 이벤트를 추가 할 수 있기를 원합니다. 현재 빈 이벤트 객체를 만들고있는 중이며 addView라는 메서드에서 함수가 호출 될 때마다 이벤트를 추가합니다. 현재 작동하지 않습니다.

이벤트가 등록 된 지점이 확실하지 않지만 events 개체가 변경되면 어떻게 든 청취자를 업데이트하기 위해보기를 가져야한다고 의심됩니다.

아무도 초기화 후 Backbone.js에 이벤트를 추가하는 방법을 알 수 있습니까? 내가 제대로 질문을 이해 해요 경우 이벤트 해시에 추가 이벤트를 추가 한 후

define([ 
    'jQuery', 
    'Backbone'], 

    function ($, Backbone) { 

     var contentViews = new Array(); 

     var SlidePanelView = Backbone.View.extend({ 

      events: {}, 

      /// <param name="targetDataAtt">The unique value inside the target's Data-Slide-Panel-Id attribute</param> 
      /// <param name="event">Backbone event to trigger view</param> 
      /// <param name="destroyOnRemove">True to destroy view when removed, False otherwise (Default true)</param> 
      addView: function (targetDataAtt, event, view, destroyOnRemove) { 
       destroyOnRemove = typeof destroyOnRemove !== 'undefined' ? destroyOnRemove : true; 

       this.events[event] = "viewEventFired"; 
       contentViews[targetDataAtt] = { View: view, DestroyOnRemove: destroyOnRemove }; 
      }, 

      viewEventFired: function (e) { 

       var target = $(e.target); 
       var id = target.attr('data-slide-panel-id'); 
       console.log(id); 
      } 

     }); 

     // Return a singleton?? 
     return new SlidePanelView; 


    }); 

답변

11

, 이벤트 바인드 다시보기에 delegateEvents()를 호출합니다.

addView: function (targetDataAtt, event, view, destroyOnRemove) { 
     destroyOnRemove = typeof destroyOnRemove !== 'undefined' ? destroyOnRemove : true; 
     this.events[event] = "viewEventFired"; 
     this.delegateEvents(); 
     contentViews[targetDataAtt] = { View: view, DestroyOnRemove: destroyOnRemove }; 
    } 

그것은 기존의 모든 이벤트 바인딩 바인딩을 해제하고 이벤트의 모든 이벤트가 다시 해시, 나는 그 일의 기본 성능 문제의 확실하지 않다,하지만 뭔가 알고있을 리 바인드 않습니다.

관련 문제