如何取消绑定Backbone Collection fetch回调?

时间:2012-02-08 22:37:01

标签: javascript backbone.js backbone-events

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

所以,使用这样的代码:

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

但是这个集合似乎没有在fetch之后的_callbacks内部变量中列出这个事件,所以unbind似乎没有帮助。

1 个答案:

答案 0 :(得分:1)

你总是可以向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
  }
});