Events 主干视图事件不';不要被摧毁
我在取消绑定视图事件时遇到问题。我创建一个视图,即Events 主干视图事件不';不要被摧毁,events,backbone.js,view,destroy,Events,Backbone.js,View,Destroy,我在取消绑定视图事件时遇到问题。我创建一个视图,即 var myView = Backbone.View.extend({ events : { "click .item" : "nextPage", "scroll" : "isScrolling", "click .zoom" : "imageZoom" }, initialize : function(){
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);
一旦我需要销毁视图,我就通过路由器调用一个函数,在渲染下一个视图之前,该函数在销毁数组中循环并调用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.9中引入的方法,以帮助处理视图删除。你可以:
initialize : function(){
this.listenTo(this.collection, 'reset', this.render);
}
Backbone.View.prototype.close = function() {
this.remove();
}
此外,您不需要使用此方法指定上下文
编辑:编写代码,使其看起来更像刚开始的样子。+1您也可以在视图上调用this.remove()。这将调用StopListing作为一般清理的一部分。我正在尝试listenTo,但现在在视图中触发事件时遇到问题,即view。trigger(“eventname”)是否已更改?与事件相关的内容没有更改。你能把你的代码贴在问题所在的地方吗?触发事件的对象和侦听的对象应该足够了。