我一直遇到解除视图事件的问题。我创建了一个视图,即
var myView = Backbone.View.extend({
events : {
"click .item" : "nextPage",
"scroll" : "isScrolling",
"click .zoom" : "imageZoom"
},
initialize : function(){
this.collection.on("reset", this.render, this);
},
onClose : function(){
...
}
});
var view = new myView();
destroyArray.push(view);
一旦我需要销毁视图,我通过我的路由器调用一个循环遍历destroy数组并在渲染下一个视图之前调用destroyArray [i] .close()(见下文)的函数。
Backbone.View.prototype.close = function(){
this.undelegateEvents();
this.$el.removeData().unbind();
this.remove();
if (this.onClose){
this.onClose();
}
}
close函数可以从页面中删除视图,但在视图中来回移动事件(和DOM元素)实际上会增加。有什么我做错了吗?
在视图之间移动时,我重新初始化它们,即
var view = new myView();
destroyArray.push(view);
...
view.close();
...
var view1 = new myView1();
destroyArray.push(view1);
我认为这可能会导致我的问题,但添加的事件不等于视图中绑定的事件数。
非常感谢任何帮助。谢谢。
答案 0 :(得分:0)
请查看Backbone 0.9中介绍的listenTo方法,以帮助处理视图删除 你可以:
initialize : function(){
this.listenTo(this.collection, 'reset', this.render);
}
Backbone.View.prototype.close = function() {
this.remove();
}
此外,您无需使用此方法指定上下文。
编辑代码看起来更像您最初的方式。