3

我见过这个问题

直到没有对 ember-data 故障进行任何处理,我可以写什么来修补它,这样如果我的请求没有 200OK 响应,我可以收到一条消息?

我在看 ember-data 源代码,例如这里的createRecord函数

createRecord: function(store, type, record) {
    var root = this.rootForType(type);
    var adapter = this;
    var data = {};

    data[root] = this.serialize(record, { includeId: true });

    return this.ajax(this.buildURL(root), "POST", {
      data: data
    }).then(function(json){
      Ember.run(adapter, 'didCreateRecord', store, type, record, json);
    }, function(xhr) {
      adapter.didError(store, type, record, xhr);
      throw xhr;
    });
  }

我期待的是:

success: //do something
error: //do something else

但没有这样的。这只是then在ajax请求之后。

我应该怎么办?完全重写我需要的所有方法?

4

1 回答 1

4

截至本次提交, ember 数据现在使用 Promise(特别是rsvp 实现),它替换了样式的success:error:回调:.then()

promise.then(function(value) {
  // success
}, function(value) {
  // failure
});

这与之前的回调样式非常相似,但遵循了 Promise 样式。

第一个函数在成功时调用,第二个函数在失败时调用。查看您发布的代码显示didError()在 ajax 失败时调用,这是在适配器中实现的。

didError()( source )store.recordWasInvalid()如果状态为 422 则调用,否则调用store.recordWasError()( source )。

store.recordWasInvalid()并将store.recordWasError()记录转换为isErrororisValid = false状态并触发记录上的becameError()andbecameInvalid()事件。您可以检查这些状态或订阅这些事件以显示您的错误消息。

于 2013-05-08T14:33:53.483 回答