如何指定从Ember模型到JSON的字段名称映射?

时间:2015-02-25 13:45:16

标签: ember.js ember-data

我有一个返回的API:

{id: 1, "other-property": 100}

我的Ember Data对象已定义:

MyApp.MyThing = DS.Model.extend({
  extId: DS.attr('number'),
  otherProperty: DS.attr('number')})

看起来我无法在ember模型中使用id作为属性,并且使用非标识符字段名称会带来麻烦。所以the guide建议我写一个normalizeHash函数。

App.MyThingSerializer = DS.RESTSerializer.extend({
  normalizeHash: {
    id: function(hash) {
      hash.appId = hash.id;
      delete hash.id;
      return hash;
    },
    otherProperty: function(hash) {
      hash.otherProperty = hash['other-property'];
      delete hash['otherProperty'];
      return hash;
    }
  }
});

它没有建议在通过API发回时如何重新序列化。我该如何创建双向映射?

有声明的方法吗?这看起来很麻烦。

1 个答案:

答案 0 :(得分:1)

您可以通过覆盖keyForAttribute挂钩来使用其他名称对其进行序列化:

keyForAttribute: function(key) {
    if (key === 'extId') {
        return 'id';
    } else {
        return key;
    }
}

不幸的是,我不知道更好的方法。 RESTSerializer非常复杂,我真的不知道自己的方式。我个人只是编写了自己的序列化器来摆脱所有的瑕疵。我花了2到3个小时写作,但最后因为代码更简单,我的状况要好得多。