Emberアプリケーションでサーバー側のエラーを処理しようとしているときに、受信エラーがモデルに入力されていないため、テンプレートにエラーを表示できません。使用EmberモデルでRESTAdapterを使用してサーバー側のエラーが入力されない
バージョン:
エンバー-CLI:2.4.3
エンバーデータ:2.4.2
アダプター:示すようRESTAdapter
テンプレートファイルは、ユーザサインアップするためのフォームを含む:
{{input type="text" value=username }}
{{#each model.errors.username as |error|}}
{{error.message}}
{{/each}}
{{input type="text" value=email }}
<button {{action 'register'}}>Register</button>
routesファイルには、アクションのユーザーを保存するために '登録' を含んでいます
register: function(){
var username = this.controller.get('username');
var email = this.controller.get('email');
var user = this.store.createRecord('user',{
email: email,
username: username
});
user.save().then(function(){
//handle success
},function(error){
//handle error
});
});
モデルは次のようになります。
export default Model.extend({
email: attr(),
username: attr()
});
示すように、私は、ステータス422とエラーで応答を使用していますAPIを:DS.Errorsエラーのドキュメントによると
{
"errors":[
{
"detail":"can't be blank",
"source":{
"pointer": "/data/attributes/username"
}
}
]
}
は、自分の財産にアクセスして表示することができますそのプロパティのすべてのエラーオブジェクトの配列を取得します。それが私のテンプレートファイルでやりたいことです。
また、私はエラーオブジェクトのメッセージプロパティにアクセスしようとしましたが、成功しませんでした。
{{#each model.errors.messages as |message|}}
{{message}}
{{/each}}
私は、コンソールにエラーのlengthプロパティをログに記録しようと
user.save().then(function(){
//handle success
},function(error){
//handle error
console.log(user.get('errors.length'));
});
、すなわちそれは常に私に0を与えるしかし
console.log(user.get('errors.username.length'));
所望の出力が、それでもエラーが発生しますテンプレートには表示されません。
この投稿24027053で説明されているようにRESTAdapterのajaxErrorをオーバーライドしようとしましたが、運はありません。
私は何が間違っているのか分かりません。助けてください!したがって、それは誤りがない、
user.save().then(function(){
//handle success
},function(error){
//handle error
console.log(user.get('errors.length'));
});
ユーザーが保存されていません。
を経由してエラーにアクセスすることができ、私はデフォルトをオーバーライドしていないです実際には、私はデフォルトの動作を実装することができません。私は私の質問で2回言いましたが、問題はテンプレートにエラーを表示することにあります。 console.log(user.get( 'errors.username'));ユーザー名のエラーを取得します。また、error.errorsは、目的の結果を取得します。しかし、それらはテンプレートに表示することはできません。 model.errors.username、model.errorsまたは単にerrors.usernameは何も表示しません。 –