Ember数据对第3层的嵌入式记录进行序列化/反序列化 [英] Ember-data Serialize/Deserialize embedded records on 3rd level
问题描述
模型:组(已)用户(已)发布
定义为:
// models / group.js
name:DS.attr('string'),
// models / user.js
name:DS.attr('string'),
组:DS.belongsTo('group')
// models / post.js
名称:DS.attr('string'),
用户:DS。 belongsTo('user'),
当我要求 / posts
,我的服务器返回这个嵌入式记录:
{
posts:[
{
id:1,
name:Whitey,
user:{
id:1,
name 用户1,
组:2
}
}
]
}
请注意,组
没有组记录,而不是id。
使用我的序列化程序:
// serializers / user.js
export default DS。 RESTSerializer.extend(DS.EmbeddedRecordsMixin,{
attrs:{
组:{embed:'always'}
}
});
// serializers / post.js
导出默认DS.RESTSerializer.extend(DS.EmbeddedRecordsMixin,{
attrs:{
user:{embed:'always '}
}
});
这将期望用户
和 Post
模型在其中嵌入了记录。但是,它需要一个问题,因为在json响应中没有嵌入的组
记录。
问题是,有没有办法可以在第三级禁用嵌入记录?
请帮助。
这是一篇关于序列化的好文章:
http://www.toptal.com/emberjs/a-thorough-guide-to-ember-data#embeddedRecordsMixin
Ember docs:
http://emberjs.com/api/data/classes/DS.EmbeddedRecordsMixin.html
基本上,它说的是你有2个选项1)serialize和2)反序列化。这两个选项有三个选项:
- 'no' - 不包含任何数据
- 'id'或'id' - 包含id(s),
- 'records' - 包含数据
当您写入 {embed:'always'}
这是简单的: {serialize:'records',deserialize:'records '}
。
如果你不想发送关系,请写: {serialize:false} / code>。
EmbeddedRecordsMixin 的Ember默认值如下所示:
BelongsTo: {serialize:'id',deserialize:'id'}
HasMany: {serialize:false,deserialize:'ids'}
Pardon me for coming up with this title but I really don't know how to ask this so I'll just explain. Model: Group (has) User (has) Post Defined as:
// models/group.js
name: DS.attr('string'),
// models/user.js
name: DS.attr('string'),
group: DS.belongsTo('group')
// models/post.js
name: DS.attr('string'),
user: DS.belongsTo('user'),
When I request /posts
, my server returns this embedded record:
{
"posts": [
{
"id": 1,
"name": "Whitey",
"user": {
"id": 1,
"name": "User 1",
"group": 2
}
}
]
}
Notice that the group
didn't have the group record but an id instead.
With my serializers:
// serializers/user.js
export default DS.RESTSerializer.extend(DS.EmbeddedRecordsMixin, {
attrs: {
group: {embedded: 'always'}
}
});
// serializers/post.js
export default DS.RESTSerializer.extend(DS.EmbeddedRecordsMixin, {
attrs: {
user: {embedded: 'always'}
}
});
This expects that the User
and Post
model have embedded records in them. However, it entails a problem since in the json response doesn't have an embedded group
record.
The question is, is there a way I can disable embedding records in the 3rd level?
Please help.
Here is a good article about serialization:
http://www.toptal.com/emberjs/a-thorough-guide-to-ember-data#embeddedRecordsMixin
Ember docs:
http://emberjs.com/api/data/classes/DS.EmbeddedRecordsMixin.html
Basically, what it says is that you have 2 options 1) serialize and 2) deserialize. Those two have 3 options:
- 'no' - don't include any data,
- 'id' or 'ids' - include id(s),
- 'records' - include data.
When you write {embedded: 'always'}
this is shorthand for: {serialize: 'records', deserialize: 'records'}
.
If you don't want the relationship sent at all write: {serialize: false}
.
The Ember defaults for EmbeddedRecordsMixin are as follows:
BelongsTo: {serialize:'id', deserialize:'id'}
HasMany: {serialize:false, deserialize:'ids'}
这篇关于Ember数据对第3层的嵌入式记录进行序列化/反序列化的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!