我正在设计一个 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();
这些选项的优点/缺点是什么?有没有 Backbone 的设计方式?
我倾向于选项 2,因为在响应中添加诸如分页详细信息或下一个 url 之类的内容似乎更容易。但选项 2 在几个方面似乎更困惑。例如,当我保存搜索模型时,我会在服务器上为它生成一个 ID 吗?不要认为我需要通过 ID 获取该模型,删除或更新它也没有任何意义,因为我没有坚持它。
最佳答案
我不知道这是否是一个好习惯,
但我使用“获取”方法中的“数据”选项进行搜索。
https://stackoverflow.com/a/6659501/1067061
也许它有帮助。
祝你好运!
编辑
这是在集合 url 中传递查询参数的正确方法,
The reference to the Docs展示了如何在 fetch 选项中传递 data 属性,data 属性实际上是一个对象,键值对引用查询参数及其值
关于rest - 如何使用主干设计 REST 搜索,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11106478/