为什么没有Ember Data将多个记录请求批处理为单个HTTP请求?

时间:2014-09-29 12:57:44

标签: json ember-data

我希望findByIds通过在GET请求中请求多个记录来优化请求。相反,在我的应用程序中,Ember Data为每条记录发出单独的HTTP GET请求,而不是将所有请求捆绑到单个请求中。我有一个显示数十甚至数百个小记录的把手模板,它会使服务器充满许多HTTP请求,而不仅仅是一个。

以下是我如何通过findByIds请求记录:

App.ThingRoute = Ember.Route.extend({
  model: function (params, transition) {  
    return this.store.findByIds('thing', [4,65,22]);
  }
}

以下是该查找的相关请求和响应的摘要:

http://example.com/things/4
{"things":[{"id":"4", "name":"foo"}]}

http://example.com/things/65
{"things":[{"id":"65", "name":"bar"}]}

http://example.com/things/22
{"things":[{"id":"22", "name":"baz"}]}

假设没有记录在本地缓存中,我原本期望Ember Data发出以下单个请求:

http://example.com/things/4,65,22

并得到这样的回复:

{"things":[
  {"id":"4", "name":"foo"},
  {"id":"65", "name":"bar"},
  {"id":"22", "name":"baz"}
]}

这与Q& A中的某些问题不同,后者询问响应中的侧载数据。

1 个答案:

答案 0 :(得分:2)

我通过浏览Ember数据源找到了答案。

coalesceFindRequests需要设置为true,而不是false(默认值)RESTAdapter。

coalesceFindRequests: true,

在服务器上,我想支持多种不同的请求格式:

GET /things/4,65,22 
GET /things/ids[]=4&ids[]=65&ids[]=22 

在我的routes.rb文件中,

get 'app/things/:ids'    => 'app#things', :via => :get 
get 'app/things'         => 'app#things', :via => :get 

并且必须更改我的控制器,因此如果“ids”是一个数组,请保持原样。如果“ids”是一个字符串,则通过“,”分割来创建一个数组。