2012-03-15 3 views
0

나는 자신의 render 메소드에서 새로운 백본보기를 만드는 상위 백본보기를 가지고 있습니다. backbone.js : 상위보기에서 사용자 정의보기를 트리거 할 수없고 자식보기를 바인드 할 수 없습니다.

var appView = Backbone.View.extend({ 
    ... 
    render: function() { 
     preview = new previewDataView({model: model, el: $el.find('.preview-container')}); 
    } 
}); 

나는 appView에서 사용자 지정 이벤트를 트리거하고 그것에 previewDataView 결합을 할 수 있도록하려면 -이 가능합니까? previewDataView 시도했을 때 이벤트를받지 못했습니다. 생각?

답변

2

두 가지 방법으로이 작업을 수행 할 수 있다고 생각합니다. 먼저 부모를 자식보기로 전달합니다. 둘째, 이벤트 발생을 처리하는 eventAggregator를 만듭니다. FIRST

:

당신은 옵션으로 previewDataView에 앱 조회를 통과 할 수있다. 당신의 previewDataView에서

preview = new previewDataView({ // your options, 'parent':this }); 

당신과 같이 부모 사용자 정의 이벤트에 바인딩 할 것 :

this.parent = this.options.parent; 
this.parent.bind('eventName', this.onEvent, this); 

SECOND을 :

당신은 당신의 전망을 구독하는 데 도움이 eventAggregator를 만들 수 있습니다 (다만이 기술을 배웠) 서로에게 의미있는 이벤트에 대한 가입을 취소 할 수 있습니다. 다음은 스택에 자세하게 설명 좋은 답변입니다 :

Backbone.View.prototype.eventAggregator = _.extend({}, Backbone.Events); 

가 시작이 실행 유무 : 코멘트에 fire an event from one view to another in backbone

는, @ 브라이언 Genisio는 자신의 코드에서이 문제를 포함 한 단계 더 걸립니다 귀하의 코드 중 하나이며 모든보기는 eventAggregator에 액세스 할 수 있습니다. eventAggregator는보기를 통해 트리거되고 수신되어야하는 이벤트의 중심 허브가 될 것입니다. 이처럼 사용하십시오 :

이와
// Parent View 
this.eventAggregator.trigger('someEvent'); 

// Child View 
this.eventAggregator.bind('someEvent', this.function, this); 

명시 적 이벤트가 트리거링 및 청취 서로에 액세스 할 필요가보기간에 참조를 전달 할 필요가 없습니다. 이 방법은 나에게 도움이되었다. :-)

+0

너무 좋은 하하, 멋진 설명 btw .. backbone.js 프로젝트가보기와 전환과 ​​더 복잡 해지면 이러한 것들이 실제로 그러한 이벤트를 처리하는 패턴 방법을 찾는 데 도움이됩니다. – mateusmaso