Javascript 如何解除主干集合提取回调的绑定?

Javascript 如何解除主干集合提取回调的绑定?,javascript,backbone.js,backbone-events,Javascript,Backbone.js,Backbone Events,如果我有一个视图,该视图的集合是在initialize函数中获取的,但是在获取返回之前需要清理该视图,那么如何解除成功和/或错误回调的绑定 因此,对于这样的代码: Backbone.View.extend({ initialize: function () { this.collection = new MyColl(); this.collection.fetch({ success: this.successCallback, error: thi

如果我有一个视图,该视图的集合是在initialize函数中获取的,但是在获取返回之前需要清理该视图,那么如何解除成功和/或错误回调的绑定

因此,对于这样的代码:

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()来清理它时(在本例中是为了显示另一个视图),我不想稍后调用successCallback(在视图“清理”之后)

我试过:

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

但是集合在获取后的_callbacks内部变量中似乎没有列出this事件,因此取消绑定似乎没有帮助。

您可以始终向this.successCallback和this.errorCallback添加一个逻辑标志,以检查是否调用了this.close:

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

很公平。这是有道理的。最好不必存储额外的状态,只需从fetch选项中解除成功和错误回调的绑定。