在backbonejs开发的时候,可能会遇到这种情况:
假设一个页面有一个点击便触发alert的事件,当离开这个页面在回来,再点击这个事件的时候发现它触发了两次alert事件,在离开在回来再点击,它触发了3次alert事件,每次离开在回来都会多触发一次事件。
这是由于backbone中view的事件是由el来delegate的,有时候如果在离开这个页面时,如果el所代理的事件仍然有可能被调用到,那么js便不会把老的view回收,当下一次再来到当前页面时,由于又新建了一个view,所以点击alert事件时会多触发一次。
而这些老的未被回收的view就是Zombie Views。
这里的文章很好的解释了这个事件,并提供了一些解决方法。
比如:
// 解除所有事件
$(this.el).unbind()
// 解除个别事件
$(this.el).undelegate('.className','click');
// 从DOM中删除el
$(this.el).remove();