backbone.js的View里的事件重复调用
程序员文章站
2022-07-08 16:27:12
...
backbone的一个视图被初始化多次后,发现一个按钮事件的单击函数,被调用多次。
A视图初始化后,再初始化B视图,两个视图为同一个ID注册单击事件后,A视图和B视图里的
单击事件都会调用。
为了删除前一个视图注册的事件,使用jquery的unbind,使用jquery从dom里删除对应ID的dom元素,结果,再添加相同的ID,事件依然有效,两个视图的单击函数还在执行。
查看backbone的文档,视图在初始化时,使用jquery的On函数注册了事件,jquery
的on函数使用jquery内部的事件代理机制,将事件注册在jquery内部,而不是绑定在html的dom对象上,要移除事件,必须要使用与on函数注册事件时完全一致的选择符。通过backbone注册事件时,我们不知道具体的选择符是什么,所以也无法通过jquery去删除注册到jquery里的事件。
要终止事件,只能通过view.remove方法,移除view对象时,删除在jquery里注册的事件,或调用view的停止事件监听方法。
如果一个视图是在闭包里完成的,如
这样的话,丢失了view的引用,这个事件就无法删除,在运行期间会一直有效。
A视图初始化后,再初始化B视图,两个视图为同一个ID注册单击事件后,A视图和B视图里的
单击事件都会调用。
为了删除前一个视图注册的事件,使用jquery的unbind,使用jquery从dom里删除对应ID的dom元素,结果,再添加相同的ID,事件依然有效,两个视图的单击函数还在执行。
查看backbone的文档,视图在初始化时,使用jquery的On函数注册了事件,jquery
的on函数使用jquery内部的事件代理机制,将事件注册在jquery内部,而不是绑定在html的dom对象上,要移除事件,必须要使用与on函数注册事件时完全一致的选择符。通过backbone注册事件时,我们不知道具体的选择符是什么,所以也无法通过jquery去删除注册到jquery里的事件。
要终止事件,只能通过view.remove方法,移除view对象时,删除在jquery里注册的事件,或调用view的停止事件监听方法。
如果一个视图是在闭包里完成的,如
(function(){ var View = Backbone.View.extend({ 'click #id':'btnClk' }); var v = new View(); v.render(); })()
这样的话,丢失了view的引用,这个事件就无法删除,在运行期间会一直有效。
上一篇: jquery tr rowindex