2

我正在使用 RESTAdaptor 和 Ember-Data 1.0.0-beta-2。我正在遵循 Ember 文档http://emberjs.com/guides/models/connecting-to-an-http-server/中关于从服务器返回的 JSON 应如何格式化为 belongsTo 关系的指导 - 但相关的未加载对象。Chrome 中的 Ember 检查器始终将关系显示为空。

我从服务器获取的 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 中的方法,但没有结果。

4

3 回答 3

0

您是否尝试过以下操作:

{
  "danceStyle": {
    "id": 2,
    "name": "Balboa",
    "partnered": true,
    "parent": 1
    "children": []  
  }
}
于 2013-09-17T16:49:50.347 回答
0

截至今天,您不能将“链接”属性用于 belongsTo 关系。这只能通过 hasMany 关系完成。

编辑 9/23/14

“链接”现在适用于 hasMany 和 belongsTo 关系。“链接”了!

于 2013-09-18T20:32:47.817 回答
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

于 2013-09-18T05:29:46.983 回答