2014-09-29 38 views
1

我期待findByIds通过在GET请求中请求多条记录来优化请求。相反,在我的应用程序中,Ember Data会为每条记录发出一个单独的HTTP GET请求,而不是将所有请求捆绑到一个请求中。我有一个句柄模板显示数十甚至数百个小记录,并且它使用许多HTTP请求来洪泛服务器,而不仅仅是一个。为什么不是Ember Data将多个记录请求分批处理成一个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数据发出单一请求:

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

并取回这样的回应:

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

这比一些将q &一个我见过的询问在响应侧加载数据的不同。

+0

移动我的评论回答。 – user3158114 2014-09-29 16:21:20

回答

2

我通过Ember数据源发现了我的答案。

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

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”是一个字符串,则通过分割“,”来创建一个数组。

+0

谢谢你谢谢你!更多细节在这里:http://emberjs.com/blog/2014/08/18/ember-data-1-0-beta-9-released.html#toc_hasmany-coalescing-now-opt-in – EasyCo 2014-12-28 05:00:58

相关问题