我试图尽可能清楚地说出这一点。
我有一个显示表单的视图。我将事件处理程序绑定到提交按钮,如下所示:
events: {
'click #bsubmit': 'save'
}
在保存功能中,成功之后,在我离开之前,我会注意undelegateEvents():
...
that.undelegateEvents();
window.router.navigate('#/home');
...
所以,如果有人来到这个页面,提交页面并转到(实际上:被送回)主页,那就好了。
但是,此处还显示了一个“主页”链接,它是顶级模板的一部分。它的指定如下:
<a href="#/home">Home</a>
因此,如果有人来到此页面,点击主页链接,并(从那里)返回到此页面,该事件将第二次映射。现在,当有人提交表单时,会提交两次。
鉴于我有很多观点,导航可以通过多种方式发生,当导航以更高(不可控制)的方式发生时,undelegateEvents的常见模式是什么?或者我做了一些根本错误的事情?
答案 0 :(得分:0)
在您的情况下,您不需要取消发布事件。只需使用$('el').remove()
从DOM中删除您的表单,javascript事件就会自动删除
最佳解决方案是在同一个容器中分别设置HomepageView
和FormView
(请说.container
)。
完整方案的示例:
HomepageView
并在.container
FormView
并在.container
HomepageView
并在.container
因此,每次用户导航到新路线时,前一个视图都会被新视图替换。
由于之前的视图HTML不再属于DOM,因此您不再需要取消删除事件。
当然.container
元素不属于我们的视图,每个视图都有自己在.container
元素内呈现的元素。
阅读此blog post了解更多信息。