0

初期化関数でフェッチされたコレクションを持つビューがあるが、フェッチが戻る前にビューをクリーンアップする必要がある場合、成功コールバックやエラーコールバックのバインドを解除するにはどうすればよいですか?

したがって、次のようなコードを使用します。

Backbone.View.extend({
  initialize: function () {
    this.collection = new MyColl();
    this.collection.fetch({
      success: this.successCallback,
      error: this.errorCallback
    });
  },
  close: function () {
    // what goes here to keep successCallback and errorCallback from being called?
  }
});

myView.close()を呼び出してクリーンアップし(この場合は別のビューを表示するため)、後で(ビュー "cleanup"の後で)successCallbackを呼び出したくない場合。

私はもう試した:

close: function () {
  this.collection.unbind('reset');
}

ただし、コレクションには、フェッチ後に_callbacks内部変数にこのイベントがリストされていないようです。そのため、unbindは役に立たないようです。

4

1 に答える 1

1

this.close が呼び出されたかどうかをチェックする論理フラグを this.successCallback と this.errorCallback にいつでも追加できます。

Backbone.View.extend({
  initialize: function () {
    this.collection = new MyColl();
    this.collection.fetch({
      success: this.successCallback,
      error: this.errorCallback
    });
  },
  close: function () {
     // do stuff
     this.closed = true;
  },
  successCallback: function() {
    if(this.closed) return;
    //Do stuff
  }
});

または、実際にはこの方法でイベントを設定するべきではありません。代わりに次のようなことを行うと、より「バックボーンっぽい」ものになります。

Backbone.View.extend({
  initialize: function () {
    this.collection = new MyColl();
    this.collection.bind('reset', this.SuccessCallback);
    this.collection.bind('error', this.errorCallback);
  },
  close: function () {
     // do stuff
     this.collection.unbind('reset', this.successCallback);
     this.collection.unbind('error', this.errorCallback);
  },
  successCallback: function() {
    //Do stuff
  }
});
于 2012-02-09T00:07:13.960 に答える