我有两个模型Chapter
和Item
。 Chapter
可以包含多个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' })
});
答案 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.
}
});