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