ember.js - Ember 数据模型的错误属性 (DS.Errors) 未填充

标签 ember.js ember-data

我正在使用 Ember Data,但我似乎无法获取模型的“errors”属性来填充来自 REST API 的错误消息。我基本上遵循本指南中的示例:

http://emberjs.com/api/data/classes/DS.Errors.html

我的应用程序如下所示:

    window.App = Ember.Application.create();

    App.User = DS.Model.extend({
        username: DS.attr('string'),
        email: DS.attr('string')
    });

    App.ApplicationRoute = Ember.Route.extend({
        model: function () {
            return this.store.createRecord('user', {
                username: 'mike',
                email: 'invalidEmail'
            });
        },

        actions: {
            save: function () {
                this.modelFor(this.routeName).save();
            }
        }
    });

我的 API 返回这个:

HTTP/1.1 400 Bad Request
Content-Type: application/json; charset=utf-8
Content-Length: 125

{
  "errors": {
    "username": ["Username is taken!"],
    "email": ["Email is invalid."]
  }
}

在模型上调用 save() 后,以下是我在用户模型上看到的内容:

user.get('isError') // true
user.get('errors.messages') // []

即使模型正确注册了 isError 属性,我似乎也无法填充错误消息。我怎样才能让它发挥作用?我正在开发 Ember Data 版本 1.0.0-beta.8.2a68c63a 的最新测试版

最佳答案

这方面的文档肯定缺乏,除非您使用事件模型适配器,否则不会填充错误。

这是一个工作示例,另请查看 Ember: error.messages does not show server errors on save我也说了同样的话

http://jsbin.com/motuvaye/24/edit

您可以通过覆盖 ajaxError 并复制事件模型适配器的执行方式,在 RESTAdapter 上相当轻松地实现它。

App.ApplicationAdapter = DS.RESTAdapter.extend({

  ajaxError: function(jqXHR) {


    var error = this._super(jqXHR);

    if (jqXHR && jqXHR.status === 422) {
      var response = Ember.$.parseJSON(jqXHR.responseText),
          errors = {};

      if (response.errors !== undefined) {
        var jsonErrors = response.errors;

        Ember.EnumerableUtils.forEach(Ember.keys(jsonErrors), function(key) {

          errors[Ember.String.camelize(key)] = jsonErrors[key];
        });
      }
      return new DS.InvalidError(errors);
    } else {
      return error;
    }
  }
});

http://jsbin.com/motuvaye/27/edit

https://github.com/emberjs/data/blob/v1.0.0-beta.8/packages/activemodel-adapter/lib/system/active_model_adapter.js#L102

关于ember.js - Ember 数据模型的错误属性 (DS.Errors) 未填充,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24027053/

相关文章:

ruby-on-rails - Ember 和 Rails,处理后端错误

javascript - Ember cli 自动生成的路由困惑

javascript - 如何创建一个 Ember JS Master Detail,其中细节出现在数据行之间

ember.js - 你能比较两个 ember 对象吗?

ember.js - 为什么我需要 "reopenClass"来设置 ember-data 模型的 url?

javascript - rake 管道或 requirejs

javascript - Ember.js ajax POST 请求未通过 Mirage

javascript - Ember.js {{render}} 助手模型设置不正确

javascript - Ember-Data 中的多个多对多关系

ember.js - 使用 ember-data 或 ajax 调用