2012-03-14 3 views
1

목록을 만드는 데 마스터보기가 있습니다. 이보기에는 "더 많은 항목을로드하는"click 이벤트가 있습니다.
마스터보기를 확장하는 두 개의 하위보기가 있습니다.
내 문제는 하나의보기에서 "더 많은로드"버튼을 클릭하면 이전에로드 된 다른보기에 영향을 미친다는 것입니다. 다른 뷰를 초기화하기 전에 뷰를 닫아야한다는 것을 알고 있지만 내 뷰가 마스터 뷰를 확장하고 있기 때문에이 메서드는 작동하지 않습니다 (마스터 객체를 닫고 다른 자식 뷰가 초기화되지 않습니다).backbone.js가 뷰 하위에서 이벤트를 공유하지 못하도록하는 방법

내 마스터보기 : API를 매개 변수를 증가시키는 사용자 정의 방법 .increase 것을

App.Views.List = Backbone.View.extend({ 
    events: { 
     'click .load-btn' : 'loadMore' 
    }, 
    loadMore: function(e) 
    { 
     this.collection.increase().fetch({ 
      add: true 
     }); 
     e.preventDefault(); 
    } 
} 

참고.

아이 뷰 : .parent 마스터 뷰의 메소드를 호출하는 사용자 정의 방법이다

App.Views.Projects = App.Views.List.extend({ 
    initialize: function() 
    { 
     this.itemView = App.Views.Project; 
     this.collection = new App.Collections.Projects(); 
     this.parent('initialize'); 
    }, 
    render: function() 
    { 
     this.template = _.template(App.Tpl.get('projects.list')); 
     this.parent('render'); 
    } 
}); 

참고.
뷰에서 load-more 버튼을 클릭하면 이미 초기화 된 경우 마스터 뷰에서 확장되는 모든 뷰에서 loadMore 메서드를 호출하려고 시도합니다.

어떻게해야합니까?

+0

[this] (http://stackoverflow.com/questions/5457915/how-can-i-stop-event-propagation-with-backbone-js)의 중복? –

+0

여기에 _noise_가 너무 많습니다. _custom methods_'.increase' 및'.parent'가이 동작의 책임이 아닙니까? 이러한 뷰가 모두 공유되면 '엘'DOM 요소가 이벤트를 공유하게됩니다. – fguillen

답변

1

App.Views.ProjectsApp.Views.List이며 이벤트를 정의하지 않으므로 부모보기에서 상속됩니다. 이는 프로젝트 뷰 내의 모든 .load-btn 요소에 핸들러 세트가 있음을 의미합니다.

아마도 프로젝트 뷰에 빈 이벤트 해시를 추가하여이 문제를 해결할 수 있습니다.

App.Views.Projects = App.Views.List.extend({ 
    events: {}, 
    initialize: function() 
    ... 
}); 
0

기본값 방지 대신 e.stopPropagation()을 사용하십시오. 그것은 비슷한 문제에 나를 도왔다.

관련 문제