Có cách nào thích hợp để xử lý lỗi tùy chỉnh khi lưu mô hình không? Để đưa ra một ví dụ, hãy nói rằng tôi có một mô hình chỉ với hai thuộc tính "name" và "value". Và khi tôi làm:đang xử lý lỗi máy chủ tùy chỉnh trong dữ liệu ember khi lưu mô hình có thể
var myModel = this.get('store').createRecord('myModel', {"name": "someName", "value": "someValue"});
myModel.save().then(function() {
//if success
//server responded with {"myModel:{"id":1,"name":"someName","value":"someValue"}"}
},function() {
//if failure
//server responded with {"error":"some custom error message"}
//BUT HOW TO CATCH THIS AND POSSIBLY REMOVE THE MODEL FROM THE STORE
});
Một cách để giải quyết vấn đề này là gọi thêm ajax để kiểm tra xem tên có duy nhất không và sau đó thực hiện lưu. Tôi chỉ tự hỏi phương pháp tốt nhất/thanh lịch ở đây là gì.
Cảm ơn, Dee
EDIT: tôi nghĩ rằng nó có thể giúp một chút để cho thêm ngữ cảnh về phía máy chủ trong những điều trong groovy. Vì vậy, đây đó là:
Trong điều khiển của tôi, tôi có:
def create() {
try {
newRow = someService.create(params)
render someService.list(newRow) as JSON//returns data in format needed by ember-data
}
catch (ValidationException ex) {
def errors = ["errors":[]]
ex.errors.allErrors.each{
if(it.arguments[0] == "fieldName" && it.code=="constrantViolated"){
errors.errors.push(["field":it.arguments[0],"message":"some custom message"])
}
}
//I am using 422 here because of post in http://stackoverflow.com/questions/7996569/can-we-create-custom-http-status-codes
render(status: 422, contentType: 'JSON', text: (errors as JSON))
}
}
Sau đó, trong điều khiển ember của tôi:
var myModel = self.get('store').createRecord('myModel ', myModelDataInJSON);
myModel .save().then(function() {
//if success
},
function (response) {
myModel .deleteRecord();
var errors = $.parseJSON(response.responseText);
for (var key in errors.errors) {
//do something
}
});
Cảm ơn. Ban đầu tôi đã gặp vấn đề với cách để có được response.error nhưng sau đó tôi đã tìm ra cách gửi văn bản phản hồi với mã lỗi HTTP thích hợp và nhận được responseText thay thế. –
Đó là cách tôi làm cho thời điểm này nhưng tôi không thích nó bắt đầu hiển thị bản ghi và xóa nó sau khi máy chủ trả lời. Có cách nào để chờ câu trả lời của máy chủ để hiển thị bản ghi đã lưu không? – Bachet