骨干 - 使用延迟获取

时间:2016-05-20 11:53:18

标签: javascript jquery backbone.js

我有一个正在进行抓取的模型:

fetch: function (options) {
  var self = this;
  var def = $.Deferred();

  P1Comm.get({
    'dataType': 'json',
    'processAjaxResponse': self.processAjaxResponse,
    'onStatusInvalid': function (e) {
      P1.log(e, 'status');
    },
    'onSuccess': function () {
      options.success;
      def.resolve();
    },
    'onError': function (e) {
      P1.log(e);
      def.reject();
    },
    'sourceURL': P1.API_APPS_ROOT + 'v1.0/accepted-terms'
  });

  return def.promise();
},

我最近更新了这个以获得延迟功能。但是现在这已经破坏了我在视图中的功能,该视图设置了获取的数据并将其放入模型中。

fetchAcceptedTerms: function () {
  var self = this;
  this.appAcceptedTerms = new T1AppAcceptedTerms();
  this.acceptedTerms = new AppAcceptedTerms();

  this.acceptedTerms.fetch({
    success: function (data) {
      if (data.meta.status === 'success') {
        self.appAcceptedTerms.set(data.data);
      }
    }
  });
},

在我将fetch的结构更改为包含deferred之前,此函数运行正常。

有人能指出我做错的方向吗?

由于

更新:

fetch工作时(延迟之前)是这样的:

fetch: function (options) {
  var self = this;

  return P1Comm.get({
    'dataType': 'json',
    'processAjaxResponse': self.processAjaxResponse,
    'onStatusInvalid': function (e) {
      P1.log(e, 'status');
    },
    'onSuccess': options.success,
    'onError': function (e) {
      P1.log(e);
    },
    'sourceURL': P1.API_APPS_ROOT + 'v1.0/accepted-terms'
  });
},

1 个答案:

答案 0 :(得分:0)

由于Deferredget已经返回Promise对象,因此不清楚为什么您需要额外的fetch,但正如评论者已经指出的那样,您还需要实际上并没有调用options.success函数:

'onSuccess': function () {
  options.success;
  def.resolve();
}

应该是

'onSuccess': function(data) {
  options.success(data);
  def.resolve();
}