Ember数据映射从JSON嵌入对象 [英] Ember-data mapping embedded object from JSON
问题描述
Activity
的模型,其属性定义如下: 所有者:DS .belongsTo('App.User',embedded:true)
用户
当我得到这样的JSON响应时,也是一个定义的模型:
某些单个属性和
user:{id:etc.}
我的所有属性映射良好,但用户嵌入的对象来自JSON不映射到所有者属性。但是,当我更改
所有者
到
用户
它映射良好。但是我想离开业主,因为这是我的意思的更好的表现。我试过这个动作:
所有者:DS.belongsTo('App.User',key:'user',embedded:true )
但没有帮助。
extractSingle
(见下例)。此外,您应该定义如下所示的关系: App.Activity = DS.Model.extend({
name: DS.attr('string'),
所有者:DS.belongsTo('user')
});
App.User = DS.Model.extend({
name:DS.attr('string'),
activities:DS.hasMany('activity')
});
接下来,我建议使用 ActiveModelAdapter
if您在与服务器通信时使用下划线(例如EmberData 0.13):
App.ApplicationAdapter = DS.ActiveModelAdapter;
最后,要使用所有者
code>用户,在自定义序列化程序中覆盖 typeForRoot
。
示例:
App.ApplicationSerializer = DS.ActiveModelSerializer.extend({
typeForRoot:function(root){
if(root =='owner'|| root =='owners'){root ='user';}
return this._super(root);
},
//基于: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);
}
});
I am struggling with a strange problem. I have a model called Activity
with a property defined like this:
owner: DS.belongsTo('App.User', embedded: true)
The User
is also a defined model when I'm getting the JSON response like this:
some single properties and
user: { id: etc. }
My all properties map well but the user embedded object from JSON doesn't map to the owner property. However, when I change
owner
to
user
It maps well. But I want to leave the owner because it's a better representation of what I mean. I tried this action:
owner: DS.belongsTo('App.User', key: 'user', embedded: true)
but it didn't help.
First, I recommend using the latest Ember / EmberData, but you will need to handle embedded records manually by enhancing extractSingle
in a custom serializer (see example below). Also, you should define relationships like this:
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')
});
Next, I recommend using the ActiveModelAdapter
if you are using underscores when communicating with the server (i.e. like in EmberData 0.13):
App.ApplicationAdapter = DS.ActiveModelAdapter;
Finally, to use owner
for a User
, override typeForRoot
in a custom serializer.
For example:
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);
}
});
这篇关于Ember数据映射从JSON嵌入对象的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!