处理来自其余适配器的错误

时间:2013-08-30 20:44:36

标签: ember.js ember-data

我正在使用ember-data,并希望捕获并显示其余适配器返回的任何错误。我查看了问题here

我在模型定义中添加了以下代码:

 becameInvalid: function(errors) {
        alert ("here" + errors);
    },

,其余适配器返回422(不可处理的实体)代码

但是,警报未显示。我错过了什么,或者只是一个真正的新手?

感谢

更新#1:

取得一些进展。其余服务器返回以下Json:

{"errors":{ "lastName": ["LastName cannot be blank"] }} 

模型有

becameInvalid: function(errors) { console.log(JSON.stringify(errors)); }, 

但是,控制台现在具有以下内容:

{"email":"jmls@foo,com","firstName":"Julian","id":"aa7c4b42-df64-8fb8-d213-0ad81‌​c9bc213","lastName":"","notes":"ccc"}

这似乎是记录本身的json,而不是错误。

如何解决错误?我试过了

console.log(errors.get("errors.lastName")

但未定义。

3 个答案:

答案 0 :(得分:0)

尝试:

becameError: function(object) {

}

答案 1 :(得分:0)

我认为你错过了一些东西,使用becameInvalid为我工作。

例如:

App.Person = DS.Model.extend({
    name: DS.attr('string') ,
    becameInvalid: function(errors) {        
        alert(errors.get('errors.name').join(','));
    }
});

<强>更新

遵循@fanta的建议,在表扬中。也许你的问题在于返回的json,预期是:

{
  errors: {
    field_a: ['error a', 'error b'],
    field_b: ['error c']
  }
}

field_a必须在DS.attr(field_a)上映射一些字段。

查看该示例http://jsfiddle.net/marciojunior/8maNq/

答案 2 :(得分:0)

尝试使用DS.rejectionHandler

DS.rejectionHandler = function(reason) {
  Ember.Logger.assert([reason, reason.message, reason.stack]);

  throw reason;
};

这应该捕获适配器的所有错误。