在Ember中标准化错误有效负载

感觉

假设我有一个Person模特

App.Person = DS.Model.extend
  firstName: DS.attr 'string'
  lastName: DS.attr 'string'
  email: DS.attr 'string'

我正在使用ember-data,调用使用带下划线的属性名称(即firstNameis first_name的REST API ,因此我正在自定义,ApplicationSerializer以执行“全面”标准化(请参阅docs)。

App.ApplicationSerializer = DS.RESTSerializer.extend
  keyForAttribute: (attr) -> 
    Ember.String.underscore(attr)

这对于与服务器之间的数据进行序列化和标准化都非常有用。但是,来自服务器的错误呢?

假设我有一个尝试尝试PUT更新Person记录的操作。所以我有按钮

# Somewhere in the person/edit template
<button {{action "save"}}>Save</button>

和控制器

App.PersonEditController = Ember.ObjectController.extend
  actions:
    save: ->
      @get('model').save().then(@onDidCreate.bind(@)).fail(@onBecameError.bind(@))

  onBecameError: (res) ->
    @get('model').set 'errors', res.responseJSON.errors

但这在带下划线的属性名称(即{first_name: ["can't be blank"]}上设置了错误为了显示错误,我必须将我的视图绑定到下划线的属性名称。然后,我的视图将同时绑定到firstNamefirst_name属性。

如何使用相同的序列化器对错误有效载荷进行标准化以保持一致性?


编辑

ajaxError我没有覆盖问题,而是只使用了他的回答中提到ActiveModelSerializerandActiveModelAdapter和kingpin2k。这将规范化和序列化数据和错误,从强调属性到camelCased属性。

劲派2k

覆盖适配器上的ajaxError钩子,这是活动模型适配器执行此操作的方式。

App.ApplicationAdapter = DS.RESTAdapter.extend({
 /**
    The ActiveModelAdapter overrides the `ajaxError` method
    to return a DS.InvalidError for all 422 Unprocessable Entity
    responses.

    @method ajaxError
    @param jqXHR
    @returns error
  */
  ajaxError: function(jqXHR) {
    var error = this._super(jqXHR);

    if (jqXHR && jqXHR.status === 422) {
      var jsonErrors = Ember.$.parseJSON(jqXHR.responseText)["errors"],
          errors = {};

      forEach(Ember.keys(jsonErrors), function(key) {
        errors[Ember.String.camelize(key)] = jsonErrors[key];
      });

      return new DS.InvalidError(errors);
    } else {
      return error;
    }
  }

});

您的可能相似,但忽略422

App.ApplicationAdapter = DS.RESTAdapter.extend({
 /**
    The ActiveModelAdapter overrides the `ajaxError` method
    to return a DS.InvalidError for all 422 Unprocessable Entity
    responses.

    @method ajaxError
    @param jqXHR
    @returns error
  */
  ajaxError: function(jqXHR) {
    var error = this._super(jqXHR);

    if (jqXHR) {
      var jsonErrors = Ember.$.parseJSON(jqXHR.responseText)["errors"],
          errors = {};

      forEach(Ember.keys(jsonErrors), function(key) {
        errors[Ember.String.camelize(key)] = jsonErrors[key];
      });

      return new DS.InvalidError(errors);
    } else {
      return error;
    }
  }

});

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

标准化总是必要且更有效吗?

来自分类Dev

标准化1MB文本文件的最有效方法?

来自分类Dev

在Redshift中标准化数据

来自分类Dev

在OpenCV中标准化图像

来自分类Dev

如何在熊猫中标准化

来自分类Dev

在PHP中标准化土耳其语?

来自分类Dev

在Matlab中标准化直方图

来自分类Dev

在php中标准化多维数组

来自分类Dev

在Java中标准化西班牙日期

来自分类Dev

如何在JHipster应用程序中标准化REST错误?

来自分类Dev

在Ember deleteRecord中添加有效负载

来自分类Dev

在Matlab中标准化直方图并使y轴具有百分比

来自分类Dev

如何在C中标准化路径(删除所有重复的'/')

来自分类Dev

如何在Lucene中标准化未知字符?

来自分类Dev

如何在python中标准化numpy数组

来自分类Dev

如何在Java中标准化Unicode数字

来自分类Dev

在Matplotlib中标准化Facecolors使用的颜色图

来自分类Dev

在python中标准化numpy数组列

来自分类常见问题

如何在R中标准化字符串

来自分类Dev

KMeans是否自动在sklearn中标准化功能

来自分类Dev

在Redux应用中标准化api响应的意义何在?

来自分类Dev

在postgres中标准化日期-迄今为止的字符

来自分类Dev

如何在python中标准化直方图?

来自分类Dev

如何在OpenGL / LWJGL中标准化鼠标坐标

来自分类Dev

如何在Encog中标准化非CSV数据

来自分类Dev

在画布WPF中标准化现实世界数据

来自分类Dev

如何在PySNMP中标准化OID索引检索?

来自分类Dev

如何在DataFrame中标准化每个组?

来自分类Dev

在长格式数据框中标准化日期