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() (下記参照) を呼び出す関数を Router を介して呼び出します。

    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 に答える