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的引用,这个事件就无法删除,在运行期间会一直有效。

相关推荐