我正在设计一个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获取该模型,删除或更新它并不是真的有意义,因为我没有坚持它.
小智 5
我会选择一个.至少一个模型应该对应于单个搜索结果和对整个搜索结果集合的集合.因此,如果您搜索volvo并且返回了6个项目,则每个项目应该是您的集合中包含的模型.
现在,这在很大程度上取决于您在服务器上表示结果的方式.例如,如果您有汽车实例,那么您只需使用查询执行搜索服务器端并将结果对象作为json返回.然后,您可以将返回的列表设置为符合条件的汽车模型集合.但如果您打算以其他方式返回查询结果,那么您将不得不考虑模型应如何表示数据
| 归档时间: | 
 | 
| 查看次数: | 7638 次 | 
| 最近记录: |