2

私は Ember.js(rc0) と Rails で作業でき、期待どおりに動作するシンプルなアプリを作成できますが、特定のストーリーに焦点を当てたいと考えています。

ユーザーとして、フォームに「フィルター」テキストを入力してから、フィルターに一致する項目のみを ArrayController に表示させたいと考えています。たとえば、「Ya%」のような名前の人を表示する連絡先アプリを考えてみてください...

警告: データベースが何千もの連絡先レコードを保持しているとします。クライアントでこれらの連絡先をフィルタリングしたくありません。サーバーでそれを行う方が理にかなっています。

質問: ember.js/ember-data でこれを行うにはどうすればよいですか? サーバーでは、インデックス URL の検索パラメーターを簡単に許可して、データをフィルター処理して管理しやすいリストにしたり、応答を 20 項目に制限したりすることもできます。

ビューを使用してコントローラーのフィルター テキストにアクセスすることもできますが、次はどこに行けばよいでしょうか? そのフィルターをサーバーに渡すにはどうすればよいですか?

アップデート:

モデル オブジェクトで「find」を使用することができ、ember (ember データ) がサーバーに移動して新しいデータを取得しました。クライアント側には最初からすべての Contact レコードのサブセットしかなかったからです。クライアントで何をフィルタリングする代わりに、サーバーに自動的に延期されます...これは素晴らしいことです。

App.ContactIndexController = Ember.ArrayController.extend
 search_term: null
 submit: (view) ->
   this.set('content', App.Contact.find({search: "#{view.search_term}"}))
4

1 に答える 1

2

これは の良い使用例ですfindQuery。例えば:

store.findQuery(App.Contact, {q: queryString})

これにより、適切なアダプターが呼び出さfindQueryれ、成功した場合は、返されたレコードがストアに読み込まれ、DS.AdapterPopulatedRecordArray.

クエリ オブジェクトを完全にカスタマイズして、サーバーのエンドポイントに一致するパラメーターを含めることができることに注意してください。


更新:マイケルがコメントで指摘したように、上記は次と同等です:

App.Contact.find({q: queryString})

...これは確かにクリーンなソリューションであり、特に店舗に直接アクセスする必要はありません。

于 2013-02-26T20:15:54.957 に答える