我在Backbone中有这个视图,它会根据用户操作更改其事件。
所以我有三个观点,都已经初始化了。
var view1 = new MainView({el : '#view1'});
var view2 = new ProductsView({el : '#prodcuts'});
var view3 = new StoresView({el : '#stores'});
现在我要做的是将事件从一个视图复制到另一个视图,然后更新视图el。我试过了:
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 :(得分: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() 方法。