2

在自定义服务器 PHP API 上使用 Ember RC6 和 Ember-Data v0.13-54 开发应用程序时遇到了模型关系(主要是多对多)和侧面加载的一些问题。

有问题的模型是:

App.Member = DS.Model.extend({
  apiToken: DS.attr('string'),
  apiTokenExpire: DS.attr('string'),
  favourites: DS.hasMany('App.Presentation')
});

App.Presentation = DS.Model.extend(
{
  title: DS.attr('string'),
  description: DS.attr('string'),
  date: DS.attr('date'),

  category: DS.belongsTo('App.Category'),
  tags: DS.hasMany('App.Tag'),
  employees: DS.hasMany('App.Member'),

  presentation: DS.belongsTo('App.File'),
  presenterNotes: DS.belongsTo('App.File'),
  cover: DS.belongsTo('App.Image')
});

要让 RESTadapater 发送与Member我拥有的模型的关系:

App.APIRESTAdapter.map('App.Member', {
  favourites: {embedded: 'always'}
});

加载/members/1服务器时返回:

{
  "member": {
    "api_token": "9fa236ad58726584d7b61bcf94b4dda37cbd3a24",
    "api_token_expire": "1383832335",
    "id": 1,
    "favourite_ids": [ 3 ],
    "group_ids": [ 2 ]
  },
  "presentations": [
    {
      "title": "That's a new one!",
      "category_id": 2,
      "id": 3,
      "tag_ids": [ 1 ],
      "employee_ids": [ 1 ]
    }
  ]
}

但是,如果我登录get('member.favourites').mapProperty('id'),我会得到一个空数组,并且favourites实际上没有一个数组被添加到Member模型中。

如果我禁用favouritesRESTAdapter 上的嵌入,一切正常。我只是想知道我是否缺少某些东西,或者 JSON 响应的格式是否存在一些问题?


编辑:

做了一些挖掘,似乎问题出在关系名称(收藏夹雇员)与侧载数据时使用的模型名称(成员演示)不同的事实。奇怪,自转。12 https://github.com/emberjs/data/blob/master/BREAKING_CHANGES.md模型应按类型侧载。

做一些测试,我为这两个模型添加了一个新的多对多关系:

App.Member得到presentations: DS.hasMany('App.Presentation')

App.Presentation得到members: DS.hasMany('App.Member')

服务器返回的 JSON 完全相同,在记录时,get('member.presentations')我现在得到了应有的演示列表。

在这一点上,这对我来说似乎是一个错误,但也许我错过了什么?我已经尝试在收藏夹员工RESTAdapater上进行映射,但这没有帮助......也许还有其他一些适配器配置可以提供帮助?

4

1 回答 1

1

这不是侧载问题,而是我对嵌入式数据和配置含义的误解。由于适配器配置为:

App.APIRESTAdapter.map('App.Member', {
  favourites: {embedded: 'always'}
});

来自服务器的预期 JSON 响应是:

{
  "member": {
    "api_token": "b84fd204b37d3fa3cee8a2b2cac8bd4fd02635a1",
    "api_token_expire": "1384027367",
    "id": 1,
    "favourites": [
      {
        "title": "Some kind of title",
        "category_id": 1,
        "id": 2,
        "tag_ids": [ 1 , 2 ],
        "employee_ids": [ 1 ]
      }
    ]
  }
}

当记录被标记为嵌入时"favourite_ids": [ X, X, X ]应该是这样。"favourites": [ HASH, HASH, HASH ]

于 2013-07-07T20:22:05.077 回答