2012-11-16 5 views
1

나는이 동작을 Backbone에서 사용자 동작에 따라 이벤트를 변경하는 것으로 보았습니다.백본 복사 한 뷰 다른 이벤트

그래서 세 가지보기가 모두 초기화되었습니다.

var view1 = new MainView({el : '#view1'}); 

var view2 = new ProductsView({el : '#prodcuts'}); 

var view3 = new StoresView({el : '#stores'}); 

이제보기에서 다른보기로 이벤트를 복사 한 다음보기 엘을 업데이트합니다.

if($option == 'products') { 
    view1.events = view2.events 
    $("div[data-role='content']", view1.el).html(content); 
} else { 
    view1.events = view3.events 
    $("div[data-role='content']", view1.el).html(content); 
} 

문제는 지금도 내용이 동일하다는 것을, 그리고 요소가 이벤트와 함께 대응은하지만 이벤트가 발사 더 이상 : 나는 시도하지했습니다. 왜 그런가요? 어떻게 고칠 수 있습니까?

+0

'$ (..., view1.el)'대신'view1. $ (...)'을 사용하여'$()'인수의 끝에 중요한'view1' 참조를 숨길 수 있습니다 . –

답변

3

delegateEvents 방법으로 전화해야합니다.

예를 들어 다음과 같이 입력하십시오.

if($option == 'products') { 
    view1.delegateEvents(view2.events) 
    $("div[data-role='content']", view1.el).html(content); 
} else { 
    view1.delegateEvents(view3.events); 
    $("div[data-role='content']", view1.el).html(content); 
} 

이벤트를 제거하려면 undelegateEvents() 메소드를 사용하십시오.

+0

알았습니다. 그냥 그걸 가지고 놀았고 view1.events = view2.events; view1.delegateEevents(). 그러나 당신은 더 짧습니다. 감사! –

+0

@DevinDixon 이벤트 해시를 전달하지 않으면 기본적으로 this.events를 사용하기 때문에 작동합니다. – Jack