如何在包含ember-data的路由器上获取jsonapi的值?

时间:2016-09-05 17:29:56

标签: ember.js ember-data json-api

我正在使用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');
})

1 个答案:

答案 0 :(得分:1)

你可以使用属性" coalesceFindRequests"在你的适配器

coalesceFindRequests: true

如果将coalesceFindRequests设置为true,它将触发以下请求:

GET /comments?ids[]=1&ids[]=2

所以这只会对所有评论进行一次调用。

  

注意:请求合并依赖于URL构建策略。所以,如果你   在您的app appRecordsForFindMany中覆盖buildURL的可能性更大   也应该被覆盖,以便合并起作用。