昨天项目中出现了一个奇怪的现象,当从一个小页面(router路由跳转)到其他小页面,然后再跳转回来的时候,该页面上的事件被重复绑定了两次,例如绑定在button上面的submit事件触发两次,导致数据提交了两次,而跳转的次数越多,重复的次数也就越多,当遇到这个问题的时候,就想到了事件的重复绑定,但是因为每次该页面的VIEW都是
重新渲染的,HTML也是动态插入的,故而纠结了一会,最后老大出马,找到了根源所在,就是el,每次的操作虽然模板是手动插入的,但是el都是没有变动,而backbone的所有
事件都是通过事件监听绑定在el上的,events调用的是jq的on方法,ON则是通过事件委托实现,可以绑定重复的事件,当el中子节点重新渲染时,实际上绑定在el中的事件还存在
虽然backbone中有默认方法undelegate,每次intilizei的时候手动清除了el的事件,但是他清除的只是当前的cid事件,而不能清除上一个cid事件(看源码)....
最后解决的办法很简单,手动$el.off(),每次初始化的时候,手动清除el上的所有事件即可。因为新的事件绑定是在initilize之后执行的,故而不用担心被清空.
新人新帖,有错请指正
backbone出现重复绑定,el上绑定数据没有及时解除
时间: 2024-11-09 09:28:04