backbone.js的View里的事件重复调用
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的停止事件监听方法。
如果一个视图是在闭包里完成的,如
(function(){ var View = Backbone.View.extend({ 'click #id':'btnClk' }); var v = new View(); v.render(); })()
这样的话,丢失了view的引用,这个事件就无法删除,在运行期间会一直有效。
相关推荐
84483065 2020-09-11
85477104 2020-08-15
83510998 2020-08-08
tztzyzyz 2020-07-05
delmarks 2020-06-28
89510194 2020-06-27
牵手白首 2020-06-14
EdwardSiCong 2020-11-23
85477104 2020-11-17
hhanbj 2020-11-17
81427005 2020-11-11
seoppt 2020-09-13
honeyth 2020-09-13
WRITEFORSHARE 2020-09-13
momode 2020-09-11
82550495 2020-08-03
tthappyer 2020-08-03
84901334 2020-07-28