0

问题陈述

我有两个模型ChapterItem. AChapter可以有很多Items。模型声明如下。

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。

我的问题

如何在Items 上设置 belongsTo 关系,而不必chapter在 JSON 响应中指定属性?

我试过的

我已经尝试在两端明确表示反向关系,但这并不能解决问题。

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

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

1 回答 1

1

免责声明:老实说,最简单的方法是遵守 Ember 的标准,但我意识到您并不总是可以控制端点。

好的,除此之外,您可以设置一个自定义序列化程序,在您收到 json 后对其进行修改。

看:

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

正常的rest序列化器: 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.
  }
});
于 2013-11-05T18:29:19.607 回答