我正在使用 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;
}
}
});
关于ember.js - Ember 数据模型的错误属性 (DS.Errors) 未填充,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24027053/