2012-11-16 66 views
1

我在Backbone中擁有此視圖,該視圖根據用戶操作更改其事件。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。$(...)'而不是'$(...,view1.el)'來避免在'$()'參數末尾隱藏重要的'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

相關問題