【问题标题】:handle errors from the rest adapter处理来自其余适配器的错误
【发布时间】:2013-09-03 16:09:08
【问题描述】:

我正在使用 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")

但未定义。

【问题讨论】:

  • 您能否提供更多有关您的代码的信息,例如模型映射和返回的 json 响应?

标签: ember.js ember-data


【解决方案1】:

尝试:

becameError: function(object) {

}

【讨论】:

    【解决方案2】:

    我认为您缺少一些东西,使用 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/

    【讨论】:

    • 可能是他没有返回错误的字段名称,或者名称与 Ember 模型中定义的名称不匹配,名称应该匹配。
    【解决方案3】:

    尝试使用DS.rejectionHandler

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

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

    【讨论】:

    • 你有来自builds.emberjs.com的最新版本的ember-data吗?旧版本可能没有拒绝处理程序。
    • 是的,更新我的应用程序以使用 ember-data 的 1.0 beta - 会让你知道它修复了什么;)
    猜你喜欢
    • 1970-01-01
    • 2010-11-11
    • 2017-05-16
    • 1970-01-01
    • 1970-01-01
    • 2018-08-11
    • 2016-04-19
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多