2013-11-27 48 views
16

如何分頁請求相關數據?例如,如果我的有一千個任務任何附加到它的模型,如果我按照RESTful思考做以下操作,我會得到所有人。如何分類餘燼數據關係

var tasks = person.get('tasks'); 

這將是太多的數據。如何強制某些查詢參數應用於幕後的請求上?理想情況下,將端點連接到端點。

?&offset=3&limit=3

這裏是一個fiddle說明我想要在IndexController完成。我不知道「ember方式」是用ember-data做分頁請求的。

+2

你有沒有想過一個很好的解決方案呢? – RyanJM

回答

-2

Ember.js guides on using models,您還可以提交查詢以及find()調用。

this.store.find('person', { name: "Peter" }).then(function(people) { 
    console.log("Found " + people.get('length') + " people named Peter."); 
}); 

從指南:

,你傳遞給find()是不透明的灰燼 數據的搜索選項的哈希。默認情況下,這些選項將作爲HTTP GET請求的 正文發送到您的服務器。

使用此功能要求您的服務器知道如何解釋 查詢響應。

+0

感謝您的回覆。是的,我讀過。問題是我的關係端點包含在我的有效載荷的「鏈接」部分。如果我想要所有的'任務',我會使用上面的方法,但如果我想查詢特定的人的任務,我的終端是不同的,'people/$ id/tasks' – David

+0

有了這種類型的結構,它似乎是'Person'應該有'tasks:hasMany('task')'關係,那麼你可以使用person.get('tasks')'來訪問特定的人的任務。 – CraigTeegarden

+0

我可能會嘗試,但任務在我的應用程序中是多態的。他們可以屬於人或公司。 – David

10

當第一被問到這個問題時,根本不存在,但現在有一個名爲ember-data-has-many-query,似乎這個能力,至少RESTAdapterJSONAPIAdapter一個插件。由於餘燼數據尚未支持分頁作爲一流的概念,它似乎有一些怪癖。如果這讓你感到不安,總會有store.query,但這確實需要你的API支持(在你的例子中)/tasks端點的person_id過濾器參數。

相關:

(它看起來並不像這個問題涉及JSON API,但討論是相關的)

5

由於今天仍然沒有默認方式來處理燼中的分頁。

首先我們可能應該看看更簡單的東西,分頁findAll請求。

這可以用類似.query({page:3})來完成,但是導致了一些問題:

  1. 這是經典的分頁一個很好的解決方案,但對於無限滾動,你仍然需要手動合併的結果。
  2. 結果沒有被緩存,所以在分頁列表上向前和向後移動會導致很多查詢。有時這是必要的,如果列表是可編輯的,但通常不是。

對於第二個問題,我構建了一個小的addon called ember-query-cache,該鉤子掛接到存儲並允許您緩存查詢結果。一個非常短的演示可用here。現在

如果我們談論的關係我就老老實實建議,直到你從灰燼數據本身有更好的支持使用頂級.query

store.query('task', { person: get(person, 'id'), page: 3 } 

沒有什麼不好的。你得到你的結果,並在另一個方向有關係。只要你不需要緩存,它就可以在沒有任何黑客入侵的情況下工作,如果你需要緩存,它需要我在我的插件中做的少數黑客攻擊。

我們仍然希望ember-data完全成爲JSONAPI,而這需要分頁。我認爲從API角度來看,最好的辦法是有能力請求關係返回的ManyArray上的下一頁和上一頁。它將與提供下一個和上一個鏈接的JSONAPI一起使用。但是爲了實現這個目標,你必須深入研究餘燼數據,而不是在頂級.query上做出重大改進,我在許多項目中都成功使用了該數據。