2011-04-25 7 views
10

제출 버튼이있는 검색 창을 표시하는보기가 있다고 가정 해보십시오. 제출 버튼을 클릭하면 검색 상자의 값을 다른보기로 전달하는 방법은 무엇입니까?맞춤 이벤트가있는보기에서 다른보기로 데이터를 전달하는 방법은 무엇입니까?

내가 시도 :
를보기 1에서 콜백 제출 내부 : 초기화 기능에,보기 2에서 this.trigger('abc', $('#searchBox').val())
을 : this.bind('abc', function(data){ console.log(data); })

하지만이 작동하지 않는 것 : 사용자 정의 이벤트가 발생되지만보기 2는 그것을 보지 못한다.

답변

5

불행하게도이 방법을 바인딩 할 수 없습니다 - 당신은 뷰 2에서 뷰 1에 대한 참조를 공유해야합니다 :이 또한 어떤 점에서 그렇게 View2의 인스턴스에 view1을 설정해야한다는 것을 의미

var View2 = Backbone.View.extend({ 
    initialize: function() { 
     _.bindAll(this, 'foo'); 
     this.view1.bind('abc', this.foo);   
    }, 
    foo: function(data) { 
     console.log(data); 
    } 
}); 

당신이 그것에 바인딩 할 수 있습니다.

당신은 어떤 컨테이너 당신이 (즉, 다른보기 또는 컨트롤러)에서 그들을 들고 간단하게 함께있는 두 개의 뷰를 결합, 주위에 대한 참조를 통과하지 않으려면 : 나는를 사용하는 것이 좋습니다

var view1 = new View1(); 
var view2 = new View2(); 

view1.bind('abc', view2.foo); 
+0

감사합니다. 그거야. –

+1

무엇이 'abc'입니까? 그것은 view1에 첨부 된 함수입니까? –

1

백본 외에 PubSub 프레임 워크. MinPubSub은 대중적인 선택입니다. https://github.com/phiggins42/bloody-jquery-plugins에서 추출한 jquery pubsub 확장을 사용합니다.

그런 다음,보기 2 앤드류 토끼의 예를 수정하려면 1.보기 참조가 필요하지 않습니다, 당신이 할 것 :

var View2 = Backbone.View.extend({ 
     initialize: function() { 
      _.bindAll(this, 'foo'); 
      $.subscribe('abc', this.foo);   
     }, 
     foo: function(data) { 
      console.log(data); 
     } 
    }); 

을 다음보기 1 :

물론
$.publish('abc', $('#searchBox').val()); 

, pubsub 시스템에서 "searchBox : submit"을 주제로 선택하는 대신 "abc"보다 나은 것을 사용하고 싶을 것입니다.

관련 문제