使用hasMany数据设置inverse belongsTo

时间:2013-11-05 17:06:25

标签: json ember.js ember-data

问题陈述

我有两个模型ChapterItemChapter可以包含多个Item个。模型声明如下。

App.Chapter = DS.Model.extend({
  items: DS.hasMany('item')
});

App.Item = DS.Model.extend({
  chapter: DS.belongsTo('chapter')
});

当我提出所有章节的请求时,我也会在响应中包含这些项目。 JSON响应示例如下。

{
  items: [
    { id: 1 },
    { id: 2 },
    { id: 3 }
  ]
  chapters: [
    {
      id: 1,
      items: [1, 2]
    },
    {
      id: 2,
      items: [3]
    }
  ]
}

章节上的hasMany关系工作正常,即如果我chapter.items它返回正确的项目列表。但是,未设置项的belongsTo关联。对于任何给定的项目,调用item.chapter始终返回null。

我的问题

如何在Item上设置belongsTo关系,而无需在JSON响应中指定chapter属性?

我尝试了什么

我尝试在两端都明确反向关系,但这并没有解决问题。

App.Chapter = DS.Model.extend({
  items: DS.hasMany('item', { inverse: 'chapter' })
});

App.Item = DS.Model.extend({
  chapter: DS.belongsTo('chapter', { inverse: 'items' })
});

1 个答案:

答案 0 :(得分:1)

免责声明:老实说,最简单的方法是遵守Ember的标准,但我发现你并不总能控制端点。

好的,这样就可以了,你可以设置一个自定义序列化程序,在你收到json之后修改它。

请参阅:

序列化程序示例: https://github.com/emberjs/data/blob/master/TRANSITION.md

正常休息序列化程序: https://github.com/emberjs/data/blob/master/packages/ember-data/lib/serializers/rest_serializer.js

App.PostSerializer = DS.RESTSerializer.extend({
  // This method will be called 3 times: once for the post, and once
  // for each of the comments
  extractArray: function(store, primaryType, payload) {
    // fix up the payload at this point.
  }
});