我有一个基本的ember-data模型对象:
App.Group = DS.Model.extend({
//attributes
});
我的json结构如下:
root.levelone.leveltwo.property
我不想按原样映射此项目,但想将json中的属性映射到模型中的属性,如下所示:
App.Group = DS.Model.extend({
property: DS.attr('string')
});
是否可以定义与传入json不同的映射?我对服务器的内容没有多少控制权。
如果使用ember-data无法做到这一点,那么对这种深度嵌套进行建模的最佳方法是什么?
答案 0 :(得分:4)
仅供参考,最新版本的Ember(第10版)要求在DS.JSONTransforms对象上定义自定义转换。 'to'和'from'属性已重命名为'serialize'和'deserialize'。
答案 1 :(得分:3)
我不太确定你在问什么,但你可以定义自定义DS.attr转换。
这样的事可能吗?没有测试过。
DS.attr.transforms.deepNest = {
from: function(serialized) {
return this.root2.property
},
to: function(deserialized) {
return { root2: property }
}
}
property: DS.attr('deepNest', {key: 'root1'})
答案 2 :(得分:3)
从此改变了:
DS.attr.transforms.object = {
from: function(serialized) {
return Em.none(serialized) ? {} : serialized;
},
to: function(deserialized) {
return Em.none(deserialized) ? {} : deserialized;
}
}
对此:
DS.RESTAdapter.registerTransform('object', {
fromJSON: function(serialized) {
return Em.none(serialized) ? {} : serialized;
},
toJSON: function(deserialized) {
return Em.none(deserialized) ? {} : deserialized;
}
})
答案 3 :(得分:2)
Ember data v 1.0 beta 2需要这种方法:
CustomTransform = DS.Transform.extend({
deserialize: function(serialized) {
...
},
serialize: function(deserialized) {
...
}
});
Ember.Application.initializer({
name: "customTransforms",
initialize: function(container, application) {
application.register('transform:custom', CustomTransform);
}
});