【问题标题】:How do I unbind a Backbone Collection fetch callback?如何取消绑定 Backbone Collection 获取回调?
【发布时间】:2012-02-09 08:07:13
【问题描述】:

如果我有一个视图,其中有一个在初始化函数中获取的集合,但视图需要在获取返回之前清理,我该如何取消绑定成功和/或错误回调?

所以,用这样的代码:

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 内部 var 中没有列出 this 事件,因此 unbind 似乎没有帮助。

【问题讨论】:

    标签: javascript backbone.js backbone-events


    【解决方案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
      }
    });
    

    【讨论】:

    • 很公平。这是有道理的。最好不必存储额外的状态,只需从 fetch 选项中取消绑定成功和错误回调。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-03-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多