我有一个返回的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发回时如何重新序列化。我该如何创建双向映射?
有声明的方法吗?这看起来很麻烦。
答案 0 :(得分:1)
您可以通过覆盖keyForAttribute挂钩来使用其他名称对其进行序列化:
keyForAttribute: function(key) {
if (key === 'extId') {
return 'id';
} else {
return key;
}
}
不幸的是,我不知道更好的方法。 RESTSerializer
非常复杂,我真的不知道自己的方式。我个人只是编写了自己的序列化器来摆脱所有的瑕疵。我花了2到3个小时写作,但最后因为代码更简单,我的状况要好得多。