0

我在解除绑定视图事件时遇到了麻烦。我创建一个视图,即

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

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

任何帮助是极大的赞赏。谢谢。

4

1 回答 1

0

请查看 Backbone 0.9 中引入的listenTo方法,以帮助处理视图删除。
你可以有 :

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

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

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

编辑:代码看起来更像你一开始的方式。

于 2013-03-26T22:34:35.113 回答