我有以下骨干模型。
var aModel = Backbone.Model.extend({
url: 'http://api.site1.com/list
});
modelObj = new aModel();
我的应用程序的域名为product.site1.com
,因此我的应用程序向服务器发出的所有请求都是跨域请求。
我对API的所有骨干请求都需要通用标头,因此我编写了以下主干同步方法
var sync = Backbone.sync;
Backbone.sync = function(method, model, options) {
options.beforeSend = function (xhr) {
xhr.setRequestHeader('key1', 'ABCD');
xhr.setRequestHeader('key2', 'EFGH');
};
sync(method, model, options);
};
当我执行如下所示的抓取方法时
modelObj.fetch();
我的应用程序向api.site1.com/list
该请求成功后,它向api.site1.com/list
这也是POST的情况。
当我表演时
获取前modelObj.save({name: "abc"})
,我的应用会向api.site1.com/list
发送OPTIONS请求,成功执行POST请求。
然而,当我进行更新,即PUT时,
我希望主干将id附加到网址,例如api.site1.com/list/1
并执行OPTIONS请求
但是当我检查我的开发工具时,OPTIONS请求发送到api.site1.com/list
。成功后,它会向api.site1.com/list
而不是api.site1.com/list/1
为什么会发生这种情况以及如何处理这种情况?
答案 0 :(得分:4)
通过设置aModel.url
,您可以强制请求中使用的网址。改为设置aModel.urlRoot
:
urlRoot model.urlRoot或model.urlRoot()
如果你是,请指定urlRoot 使用集合外部的模型来启用默认URL 用于根据模型ID生成URL。
尝试
var aModel = Backbone.Model.extend({
urlRoot: 'http://api.site1.com/list'
});