我希望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中的某些问题不同,后者询问响应中的侧载数据。
答案 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”是一个字符串,则通过“,”分割来创建一个数组。