Ember.js Ember数据Rest适配器错误处理不工作

Ember.js Ember数据Rest适配器错误处理不工作,ember.js,error-handling,ember-data,ember-cli,Ember.js,Error Handling,Ember Data,Ember Cli,我有一个基本的Ember应用程序,我正在尝试处理保存时的验证错误(模型使用REST适配器)。在我的路线上,我正在做: task.save().then( function() {alert("success");}, function() {alert("fail");} ).catch( function() {alert("catch error");}

我有一个基本的Ember应用程序,我正在尝试处理保存时的验证错误(模型使用REST适配器)。在我的路线上,我正在做:

task.save().then(
                function() {alert("success");},
                function() {alert("fail");}
                ).catch(
                    function() {alert("catch error");}
                    );
当记录有效时,我会收到“成功”警报,但当记录无效时,我不会收到“失败”警报或“捕获错误”。在控制台中,我得到:

POST http://localhost:8080/api/tasks 422 (Unprocessable Entity)
Error: The adapter rejected the commit because it was invalid
api的响应如下所示:

{"errors":{"name":["can't be blank"],"parent_task":[]}}
App.ApplicationAdapter = DS.RESTAdapter.extend({

  ajaxError: function(jqXHR) {
    var error = this._super(jqXHR);
    if (jqXHR && jqXHR.status === 422) {
      var response = Ember.$.parseJSON(jqXHR.responseText),
          errors = {};

      if (response.errors !== undefined) {
        var jsonErrors = response.errors;
        Ember.EnumerableUtils.forEach(Ember.keys(jsonErrors), function(key) {
          errors[Ember.String.camelize(key)] = jsonErrors[key];
        });
      }
      return new DS.InvalidError(errors);
    } else {
      return error;
    }
  }
});

我使用的是余烬数据1.13

您需要扩展适配器来处理错误,REST适配器不为您执行此操作(仅活动的Model one)

大概是这样的:

{"errors":{"name":["can't be blank"],"parent_task":[]}}
App.ApplicationAdapter = DS.RESTAdapter.extend({

  ajaxError: function(jqXHR) {
    var error = this._super(jqXHR);
    if (jqXHR && jqXHR.status === 422) {
      var response = Ember.$.parseJSON(jqXHR.responseText),
          errors = {};

      if (response.errors !== undefined) {
        var jsonErrors = response.errors;
        Ember.EnumerableUtils.forEach(Ember.keys(jsonErrors), function(key) {
          errors[Ember.String.camelize(key)] = jsonErrors[key];
        });
      }
      return new DS.InvalidError(errors);
    } else {
      return error;
    }
  }
});