1

我在 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);
}

问题是即使现在内容是相同的,并且存在与事件相对应的元素,但事件不再触发。为什么会这样,我该如何解决?

4

1 回答 1

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()方法。

于 2012-11-16T16:12:03.630 回答