サーバーから返された結果をフィルタリングするために、ドロップダウンとチェックボックスを持つフォームを備えた UI があります。
現在の設定を利用できるようにするためにモデルを作成する必要があるのか 、それともjqueryで値を取得してコレクションフェッチに渡すだけなのか疑問に思います。
何が良いでしょうか?
サーバーから返された結果をフィルタリングするために、ドロップダウンとチェックボックスを持つフォームを備えた UI があります。
現在の設定を利用できるようにするためにモデルを作成する必要があるのか 、それともjqueryで値を取得してコレクションフェッチに渡すだけなのか疑問に思います。
何が良いでしょうか?
それは、デザインにどれだけ投資したいかによって異なります。または、より実用的なアプローチで生活することもできます。
設計ソリューションを実行する場合Collection
、ここで扱っている結果はないと言えます。これはモデルであり、フィルター パラメータをサーバーにFilterSearch
送信するたびに、 のインスタンスを作成しています。まあ言ってみれば:FilterSearch
POST http://myapp.com/filter_searchs?field1=value1&field2=value2
サーバーはこのリクエストを受け取り、結果の配列を返します。まあ言ってみれば:
{
"field1": "value1",
"field2": "value2",
"results": [ "result1", "result2" ]
}
バックボーンFilterSearch
モデルは、サーバーから応答された情報で更新されます。
var myFilterSearch = App.FilterSearch.new({ field1: "value1", field2: "value2" });
myFilterSearch.save({ wait:true });
そこから結果を作成できますCollection
。
var myResults = App.Results.new( myFilterSearch.get( "results" ) );
(すべてのコードは簡略化されており、テストされていません)
もう 1 つの解決策は、フィルター フィールドをitselfに格納するCollection
ことです。
App.Results = Backbone.Collection.extend({
url: function() {
return "/results?field1=" + this.field1 + "&field2=" + this.field2 );
}
});
var myResults = App.Results.new({ field1: "value1", field2: "value2" });
myResults.fetch();
コレクション内のフィルタ フィールドを変更して を呼び出すだけで結果を更新できるため、このアプローチは興味深いものです.fetch()
。コレクションへのすべての参照はそのまま残ります。
(すべてのコードは簡略化されており、テストされていません)