我正在使用RESTAdaptor和Ember-Data 1.0.0-beta-2。我遵循Ember docs http://emberjs.com/guides/models/connecting-to-an-http-server/中的指导,关于如何从服务器返回的JSON应该为belongsTo关系格式化 - 但是没有加载相关对象。 Chrome中的Ember Inspector始终将关系显示为null。
来自服务器的JSON格式如下:
{
"danceStyle": {
"id": 2,
"name": "Balboa",
"partnered": true,
"_links": {
"parent": "/danceStyles/1"
}
}
}
我的模型定义是:
var attr = DS.attr;
var belongsTo = DS.belongsTo;
var hasMany = DS.hasMany;
App.DanceStyle = DS.Model.extend({
object: attr('string'),
name: attr('string'),
partnered: attr('boolean'),
parent: belongsTo('danceStyle', { inverse: 'children', async: true }),
children: hasMany('danceStyle', { inverse: 'parent', async: true })
});
我的JSON的格式符合Ember文档说我应该使用的格式,所以我正试图弄清楚什么是错的!我已尝试过其他方式在JSON中包含关系,但没有结果。
答案 0 :(得分:0)
您是否尝试过以下操作:
{
"danceStyle": {
"id": 2,
"name": "Balboa",
"partnered": true,
"parent": 1
"children": []
}
}
答案 1 :(得分:0)
我不确定_links
是否用于关系。 (如果是这样的话,根本没有详细记录......)
由于您使用的是async:true
,因此您应该可以像这样使用JSON:
{
"danceStyle": {
"id": 2,
"name": "Balboa",
"partnered": true,
"parent" : 1,
"children" : [3,4]
}
}
此时,如果您已加载该模型,然后调用.children()
Ember Data将发送/danceStyles?ids[]=3,ids[]=4
之类的请求。然后你的服务器应该返回:
{
"danceStyles" : [
{"id":3,...},
{"id":4,...}
]
}
或者,您可以使用“侧面加载”将孩子和父母与主模型一起交付。
{
"danceStyle": {
"id": 2,
"name": "Balboa",
"partnered": true,
"parent" : 1,
"children" : [3,4]
},
"danceStyles" : [
{"id":1,...},
{"id":3,...},
{"id":4,...}
]
}
我实际上没有处理自引用树型模型的侧面加载,但我知道它适用于像Blog
- >这样的安排。 Post
- > Comment
。
答案 2 :(得分:0)
截至今天,您不能对belongsTo关系使用“links”属性。这只能通过hasMany关系来完成。
编辑9/23/14
“links”现在适用于hasMany和belongsTo关系。 “链接”了!