2012-08-12 4 views
2

오른쪽에 세로 막대가있는 응용 프로그램에서 작업하고 있습니다. 컬렉션을 표시합니다. 컬렉션의 각 모델에는 select 동작이 있습니다. 페이지의 상단 중앙에 정보 표시 줄의 사이드 바에서 선택된 모델을 표시하십시오.

나는 "정보 바"를 업데이트해야이보기와 같은 역할을 하나 개의 독립적 인 백본보기가 내가 사이드 바의보기 중 하나를 선택하면 정보]의

나는 그것을 할 수있는 방법 ? 사이드 바의 각 뷰는 모델 인수로 "selected"이벤트를 가져야한다고 생각합니다. 내 질문은 Backbone.js에서 내 정보 막대보기의 변경 내용을 어떻게들을 수 있습니까 ???

답변

5

이것은 이벤트 수집기 패턴으로 잘 처리되는 것처럼 들립니다. Derick Bailey는 당신이 여기서 읽을 수있는 정말 좋은 기사를 올렸습니다. 모든 뷰 이런 그들에게 사용할 수있는 이벤트 수집기 개체를 가질 수 있도록

Event Aggregator Pattern

나는 나의 Backbone.View을 확장했다.

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

기본적으로 모델보기를 선택하면 view.eventAggregator가 일부 맞춤 이벤트를 트리거합니다.

sidebarView.eventAggregator.trigger('selected', this.model); 

또는 이와 비슷한 것입니다. 백본 이벤트를 사용하면 트리거 함수를 통해 매개 변수를 이벤트 수신기에 전달할 수 있습니다. 위의 예에서 특정 이벤트가있는 모델을 전달했습니다.

메인보기에서이 이벤트를 듣고 싶습니다.

mainView.eventAggregator.on('selected', myFunction, this); 

myFunction: function(model) { 
    // Some code to execute - model is available through param 
} 

매우 유용한 패턴입니다. 메인 뷰를 닫을 때 이벤트를 바인딩 해제하는 것을 잊지 마세요. :-)

+0

무엇 빠른 대답, 아주 잘 작동 :), 정말 고마워요 :) –