Backbone View事件不会被破坏

时间:2013-03-26 22:13:39

标签: events backbone.js view destroy

我一直遇到解除视图事件的问题。我创建了一个视图,即

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);

我认为这可能会导致我的问题,但添加的事件不等于视图中绑定的事件数。

非常感谢任何帮助。谢谢。

1 个答案:

答案 0 :(得分:0)

请查看Backbone 0.9中介绍的listenTo方法,以帮助处理视图删除 你可以:

initialize : function(){
    this.listenTo(this.collection, 'reset', this.render);
}

Backbone.View.prototype.close = function() {
    this.remove();
}

此外,您无需使用此方法指定上下文。

编辑代码看起来更像您最初的方式。