我有一个API设置,它在Accept标头中为所有请求使用媒体类型。入门我只是简单地包装了模型的获取和保存功能,但我很好奇是否有更好的方法而不是必须在每个模型和集合中执行此操作?
更新
var accountsCollection = Backbone.Collection.extend({
model: accountModel,
url: '/api/accounts',
vnd: 'application/vnd.app.AccountFeed+json',
return resp.Items;
},
search: function (q) {
this.fetch({
headers: { Accept: this.vnd },
data: {
q: q
},
success: function (data) {
//console.log(q);
}
});
}
});
如上例所示,由于需要自定义Accept标头,我必须包装fetch。在我看来,一个完美的解决方案是能够扩展fetch&保存以自动拉取Collection或Model的vnd值。我希望这能更好地澄清我的要求。
答案 0 :(得分:2)
Backbone使用sync adapter的概念来自定义您的CRUD操作。 每个集合/模型都有自己的同步方法,可以应用您的自定义http适配器。
您的代码可能如下所示:
var MyModel = Backbone.Model.extend({
sync: function(method, model, options) {
var options = options || {};
options.Accept = model.vnd;
return Backbone.sync(method, model, options);
}
});
答案 1 :(得分:2)
重写Uzi的答案,您也可以考虑提供自己的Backbone.sync
功能。 Model.fetch()
最终被委托给über-sync函数,这意味着包含Accept
标头的补丁将确保标头与您的应用程序发出的每个请求一起传递。
修改Backbone.sync
的一个很好的例子可以在Backbone / localStorage演示的annotated source中找到。