2013-11-27 7 views
16

関連データの要求をどのようにページ付けしますか?たとえば、のタスクモデルが添付されている場合、以下の場合、RESTfulな考え方ですべてを取得します。ember-dataの関係をページングする方法

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

これはあまりにも多くのデータです。舞台裏で動作するリクエストにクエリパラメータを強制するにはどうすればよいですか?理想的には、エンドポイントにこのようなものが付いています。ここで

?&offset=3&limit=3

私はIndexControllerで達成しようとしているものを説明するためfiddleです。私はember-dataを使ってページ付けされたリクエストを行う "ember way"が何であるか分かりません。

+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

お返事ありがとうございます。ええ、私はそれを読んだ。問題は私の関係エンドポイントが私のペイロードの 'リンク'部分に含まれていることです。もし私がすべての 'Tasks'を望むなら、私は上記の方法を使いますが、特定の人のタスクを問い合わせたい場合、私のエンドポイントは' people/$ id/tasks'と異なります – David

+0

そのタイプの構造'Person'は' tasks:hasMany( 'task') '関係を持つべきです。そうすれば' person.get( 'tasks') 'を使って特定の人の仕事にアクセスできますか? – CraigTeegarden

+0

私はそれを試みるかもしれませんが、私のアプリでは多態性のタスクです。彼らは人々や企業に属することができます。 – David

10

この質問を最初に頼まれたときには存在しなかったが、少なくともRESTAdapterJSONAPIAdapterのために、この可能思わember-data-has-many-queryと呼ばれるアドオンは、今そこにあります。第一級のコンセプトとしてページネーションをまだサポートしていないエバーデータによるいくつかの癖があるようです。これが気にならない場合は、常にstore.queryがありますが、エンドポイントでperson_idフィルタパラメータをAPIでサポートする必要があります。

関連:

である(それが関与この質問のように見えません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にハッキングすることなく動作します。キャッシングが必要な場合は、アドオンで行ったハッキン​​グがごくわずかです。

まだember-dataが完全にJSONAPIになることを願っています。ページネーションが必要です。私はAPIの視点から考えて、最も良いのは、関係によって返されたManyArrayの次のページと前のページを求める能力を持つことだと思います。それはJSONAPIと共に、次のリンクと前のリンクが提供されます。しかし、これを実現するには、多くのプロジェクトで正常に使用されたトップレベルの.queryを大幅に改善することなく、ember-dataを深く掘り下げなければなりません。

関連する問題