我在获取默认JSONAPIAdapter以将模型验证错误传播到登录页面时遇到问题。我已经验证了API服务器正在通过捕获错误正确发送响应并使用console.log
验证适配器和模型正在处理正确返回的数据,但由于某种原因,我无法得到它显示在页面上:
来自API服务器的JSON响应:
{ errors: [
{
detail: 'Display name already exists',
source: {
pointer : 'data/attributes/display-name'
}
},
{
detail: 'Email already exists',
source: {
pointer : 'data/attributes/email'
}
}
]}
这也会返回状态422
,显示在控制台日志中:
Failed to load resource: the server responded with a status of 422 (Unprocessable Entity)
如果我没有.catch()错误,那就是console.logs以下内容,从我读过的,在代码中看到的是标准的:
ember.debug.js:19746 Error: The adapter rejected the commit because it was invalid
at ErrorClass.EmberError (ember.debug.js:19681)
at ErrorClass.AdapterError (errors.js:23)
at ErrorClass (errors.js:49)
at Class.handleResponse (rest.js:820)
at Class.handleResponse (data-adapter-mixin.js:100)
at Class.superWrapper [as handleResponse] (ember.debug.js:25367)
at ajaxError (rest.js:1341)
at Class.hash.error (rest.js:915)
at fire (jquery.js:3187)
at Object.fireWith [as rejectWith] (jquery.js:3317)
控制器代码如下:
user.save().then(() => {
this.set('valid', 'Success! Log in!');
}).catch(() => {
console.log(user.get('errors.email')[0].message);
console.log(user.get('errors.displayName')[0].message);
});
以上捕获和console.logs错误消息正确,这意味着适配器成功捕获错误并序列化它以在模型中使用。问题出在模板中:
<div class="col-sm-6">
<h2>ERRORS</h2>
{{#each user.errors.displayName as |error|}}
<h4>{{error.message}}</h4>
{{/each}}
{{#each user.errors.email as |error|}}
<h4>{{error.message}}</h4>
{{/each}}
<h2>END ERRORS</h2>
</div>
根据DS.ERRORS Class这应该是设置它的适当方法,但是我无法在ERRORS和END ERRORS标题之间的前端正确显示错误。