我有一個基本的創建表單設置,它對名稱字段進行了驗證。該窗體的保存操作有一個承諾,優雅地保持錯誤:Ember DS.Errors疑難解答創建表格
actions: {
save: function(){
var route = this;
var createCampaign = this.store.createRecord("campaign", {
code: this.get("code"),
name: this.get("name"),
description: this.get("description"),
});
this.set("code",""),
this.set("name",""),
this.set("description",""),
// POST values to campaigns
createCampaign.save().then(function(c){
route.transitionToRoute("campaigns.view",c.id);
}, function(errors){
});
}
}
});
我的屬性定義是:
TM.Campaign = DS.Model.extend({
name: DS.attr(),
code: DS.attr(),
description: DS.attr(),
});
我讀過,通過使用RESTAdapter,被覆蓋的ajaxError
需求,所以我已經添加了以下內容:
ajaxError: function(jqXHR){
var error = this._super(jqXHR);
if(jqXHR && jqXHR.status === 422){
var response = Ember.$.parseJSON(jqXHR.responseText);
errors = {}
if (response.errors){
var jsonErrors = response.errors;
Ember.keys(jsonErrors).forEach(function(key){
errors[Ember.String.camelize(key)] = jsonErrors[key]
});
}
return new DS.InvalidError(errors)
} else {
return error
}
}
其從API來的響應的結構爲:
{
"errors": {
"name": [
"The name field is required."
]
}
}
但由於某些原因,每當我嘗試顯示DS.Errors(使用console.log(route.get("errors")
)時,我都會得到未定義的值。這就像Ember不知道響應中出現驗證錯誤。
我也確保響應狀態返回爲422 Unprocessable Entity
。任何人都可以看到我失蹤?
編輯:我已經能夠創建一個JS斌證明我的問題:http://jsbin.com/xujari/2/
謝謝。我能夠控制日誌DS.Errors,但我在前端輸出消息時遇到了問題。我有{{#each message in errors.messages}} {{message}} {{/ each}}但沒有任何內容出現。 – Jetchy 2015-01-10 08:21:50
@Jetchy編輯,以實現你想要的東西......但我不知道這是做事的正確方法。我將控制器的模型設置爲一個新的空記錄,而不是創建兩個屬性,然後在save方法中創建一個空記錄。會讓事情變得更簡單,更合乎邏輯。 – MrVinz 2015-01-10 09:33:28