我想知道是否可以以异步方式配置Ember数据在单个请求中加载多个关系。
鉴于以下模型:
// models/post.js
export default DS.Model.extend({
comments: DS.hasMany()
});
// models/comments.js
export default DS.Model.extend({
...
});
当我在模板或控制器中的某处引用属性comments
时,它将在单独的请求中逐个获取帖子的相关注释。这导致了许多请求,我想将这些请求与id-property上的过滤器组合成一个请求。
答案 0 :(得分:2)
您必须启用一个名为coalesceFindRequests: true
的所需行为的开关,您可以在应用程序适配器中设置,如下所示:
// adapters/application.js
import DS from 'ember-data';
export default DS.RESTAdapter.extend({
coalesceFindRequests: true,
});
现在,Ember将通过..api/comments?ids[]=1&ids[]=2
我认为JSONAdapter也是一样。
答案 1 :(得分:0)
是的,你应该使用链接关系:
而不是:
relationships: {
commend: {
data: [
{ id: '1', type: 'comment' },
{ id: '2', type: 'comment' }
]
}
}
这样做:
relationships: {
comments: {
links: {
related: 'http://example.com/post/A/comments'
}
}
}
关于这一点的好处是你可以在你的后端100%调整它。