Ember Data 1.0.0属于JSON中的关系

时间:2013-09-16 12:10:50

标签: ember.js ember-data

我正在使用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中包含关系,但没有结果。

3 个答案:

答案 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关系。 “链接”了!