私は API を設計しており、Backbone.js でそれを使用しています。API の一部には、検索操作が含まれます。たとえば、車を検索する場合、次のようなものがあるとします。
http://api.mysite.com/search/cars?q=volvo
バックボーンを使用すると、結果を使用するための 2 つのオプションが表示されます。
オプション 1: 検索はコレクションです
var CarSearch = Backbone.Collection.extend({
model: Car,
initialize : function(models, options){
this.query = options.query;
},
url: function(){
return "http://api.mysite.com/search/cars?q="+this.query;
}
});
var volvos = new CarSearch([], {query:'volvo'});
volvos.fetch();
オプション 2: 検索はモデルであり、結果はコレクションです
var CarSearchResults = Backbone.Collection.extend({
model: Car
});
var CarSearch = Backbone.Model.extend({
defaults: {
"query":"",
"carSearchResults":null
},
url: function(){
return "http://api.mysite.com/search/cars?q="+this.get('query');
},
parse: function(resp,xhr){
resp.carSearchResults = new CarSearchResults(resp.carSearchResults);
return resp;
}
});
var volvoSearch = new CarSearch();
volvoSearch.set({query:'volvo'});
volvoSearch.save();
これらのオプションの長所と短所は何ですか? これを設計するバックボーン的な方法はありますか?
ページネーションの詳細や次の URL などを応答に追加する方が簡単に思えるため、オプション 2 に傾いています。しかし、オプション 2 は、いくつかの点でややこしいように見えます。たとえば、保存時に検索モデルの ID をサーバー上で生成しますか? そのモデルを ID で取得する必要があるとは思わないでください。それを削除または更新することは、私がそれを保持していないため、実際には意味がありません。