如何知道一个骨干model.fetch()完成时?(How to know when a Backb

2019-08-17 00:56发布

我结合我的骨干机型这样的变化情况。

this.model.on( "change", this.render, this );

有时候,我想获取最新版本的车型的,强行渲染视图。 所以我这样做

this.model.fetch();

不幸的是model.fetch()只有当新的数据是从什么是之前存储在模型不同触发change事件。

我怎么能总是引发this.render回调获取完成时,无论触发更改事件或不?

在此先感谢您的帮助

Answer 1:

您可以使用$.ajax成功回调,但你也可以只是听为骨干syncerror的模型事件。 sync成功调用服务器后火灾, error失败的呼叫服务器后大火。

this.model.on('sync', this.render, this);
this.model.on('error', this.handleError, this);


Answer 2:

fetch方法可任选地接受具有成功和错误回调; 最简单的办法就是把你浏览的render在成功回调。 你也很可能使用返回jqXHR承诺,但如果有过了AJAX是(每jQuery的)成功,但模型初始化失败的情况下,即使用可能有问题。



Answer 3:

我不知道什么是你的代码结构,但是如果你只是抓取您的视图中你的模型,你可以使用这样的事情

var that = this;
this.model.fetch().done(function () {
    that.render();
});

否则,如果你正在撷取你的视野之外你的模型,你可以通过你的承诺,你的看法,使类似的东西

var promise = model.fetch();
// other code here
var view = new View({
    model: model,
    promise: promise
});

和您的视图中,例如在初始化

View = Backbone.View.extend({
    initialize: function(){
        this.options.promise.done(function () {
            // your code here
        });
    }
});


Answer 4:

这个怎么样的解决方案:

// emit fetch:error, fetch:success, fetch:complete, and fetch:start events
fetch: function(options) {
  var _this = this;

  options = options || {};

  var error = options.error;
  var success = options.success;
  var complete = options.complete;

  options.error = function(xhr, textStatus, errorThrown) {
    _this.trigger('fetch:error');
    if (error) error(xhr, textStatus, errorThrown);
  };

  options.success = function(resp) {
    _this.trigger('fetch:success');
    if (success) success.call(options.context, resp);
  };

  options.complete = function() {
    _this.trigger('fetch:complete');
    if (complete) complete();
  };

  _this.trigger('fetch:start');

  return Backbone.Model.prototype.fetch.call(this, options);
}

链接要点https://gist.github.com/fedyk/23761ce1236c5673fb84



文章来源: How to know when a Backbone model.fetch() completes?