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”)是否已更改?与事件相关的内容没有更改。你能把你的代码贴在问题所在的地方吗?触发事件的对象和侦听的对象应该足够了。