我正在使用jsonapi指令在ember.js应用程序和API之间建立连接。我有track
可能有50个或更多comments
,我需要在路线上加载它们以执行某些逻辑。
这是API的示例响应:
{
"data": {
"id": 1,
"type": "track",
"attributes": {
"name": "XPTO"
},
"relationships": {
"comment": {
"data": [
{"id": 1, "type": "comment"}
]
}
}
},
"include": [
{
"id": 1,
"type": "comment",
"attributes": {
"text": "Lorem ipsum..."
}
}
]
}
现在想象它有50条评论,这对于每次通话都是非常消耗的。如果我在带有each
循环的视图中执行它,它不会发出所有请求,但是我尝试在路由中访问它,它将发出所有请求。如何使用以下代码实现这一目标?
this.store.findRecord('track', 1).then((t) => {
// logic here
// I tried this but it would make all the requests too
t.get('comments');
})
答案 0 :(得分:1)
你可以使用属性" coalesceFindRequests"在你的适配器
coalesceFindRequests: true
如果将coalesceFindRequests设置为true,它将触发以下请求:
GET /comments?ids[]=1&ids[]=2
所以这只会对所有评论进行一次调用。
注意:请求合并依赖于URL构建策略。所以,如果你 在您的app appRecordsForFindMany中覆盖buildURL的可能性更大 也应该被覆盖,以便合并起作用。