我在同一 View 上多次应用 View 事件时遇到问题。我知道这是因为我将多个 View 绑定(bind)到同一个 el - 所以当我加载一个 View ,转到另一个 View ,然后返回到第一个 View 时,它会在现有的幻影 View 之上再次应用事件,因为它是每次从路由器创建一个新的 WhateverView()。
根据 this question我需要调用 view.model.off( null, null, this );重置事件。不幸的是......我没有为我的任何观点使用模型。也许这是完全错误的处理方式,但现在我的 View 本质上只是 SPA 中的不同静态页面。我最终会得到实际数据,我会使用模型/集合,但现在我只想在我的应用程序中呈现不同的静态页面 在某个容器中。我正在使用 requirejs 和文本插件,到目前为止效果很好……除了这个事件。
我也试过在渲染每个 View 之前调用 this.undelegateEvents();
(如果有问题的 View 之前已经至少渲染过一次)但它似乎没有做任何事。
最佳答案
这听起来像是您在每次创建 View 时都将事件监听器附加到元素。通过执行以下操作,我能够在应用程序中解决此问题:
$( '#coolbutton').off('click').on('click', coolFunc);
使用事件对象,调用:
this.undelegateEvents();
this.$el.removeData().unbind();
删除 View 时也有效。
关于events - 在一个元素上 Backbone 多个 View ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26894135/