我正在努力解决一个奇怪的问题。我有一个名为Activity
的模型,其属性定义如下:
owner: DS.belongsTo('App.User', embedded: true)
当我收到这样的JSON响应时,User
也是一个已定义的模型:
some single properties and
user: { id: etc. }
我的所有属性都映射得很好但是JSON中的用户嵌入对象没有映射到所有者属性。但是,当我改变
owner
到
user
它映射得很好。但我想离开主人,因为它更能代表我的意思。我尝试了这个动作:
owner: DS.belongsTo('App.User', key: 'user', embedded: true)
但它没有帮助。
答案 0 :(得分:1)
首先,我建议使用最新的Ember / EmberData,但您需要enhancing extractSingle
in a custom serializer手动处理嵌入式记录(请参阅下面的示例)。此外,您应该定义这样的关系:
App.Activity = DS.Model.extend({
name: DS.attr('string'),
owner: DS.belongsTo('user')
});
App.User = DS.Model.extend({
name: DS.attr('string'),
activities: DS.hasMany('activity')
});
接下来,如果您在与服务器通信时使用下划线,我建议使用ActiveModelAdapter
:(例如在EmberData 0.13中):
App.ApplicationAdapter = DS.ActiveModelAdapter;
最后,要对owner
使用User
,请在自定义序列化程序中覆盖typeForRoot
。
例如:
App.ApplicationSerializer = DS.ActiveModelSerializer.extend({
typeForRoot: function(root) {
if (root == 'owner' || root == 'owners') { root = 'user'; }
return this._super(root);
},
// based on: https://github.com/emberjs/data/blob/master/TRANSITION.md#embedded-records
extractSingle: function(store, type, payload, id, requestType) {
var owner = payload.activity.owner,
ownerId = owner.id;
payload.owners = [owner];
payload.activity.owner_id = ownerId;
return this._super.apply(this, arguments);
}
});