我正在设计一个 API 并使用 Backbone.js 使用它。部分 API 将包括搜索操作。例如,在搜索汽车时,我可能会遇到以下情况:
http://api.mysite.com/search/cars?q=volvo
使用骨干网,我可以看到两个使用结果的选项。
选项 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();
这些选项的优点/缺点是什么?有没有一种骨干的方式来设计这个?
我倾向于选项 2,因为将诸如分页详细信息或下一个 url 之类的内容添加到响应中似乎更容易。但选项 2 在几个方面似乎更混乱。例如,我会在保存搜索模型时在服务器上生成一个 ID 吗?不要认为我需要通过 ID 获取该模型,删除或更新它也没有任何意义,因为我没有坚持它。