2014-09-29 87 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

相關問題