使用 Backbone 发送 PUT 请求
Send PUT request with Backbone
我必须通过 backbone 拨打服务电话来更新用户设置。这是简化的代码:
var settingService = Backbone.Model.extend({
"url": "usersettings"
});
var SettingsView = Backbone.View.extend({
initialize: function() {
this.services = {
"userSettingsService": new settingService()
};
},
saveSettings: function() {
this.services.userSettingsService.save({
"currency": "USD",
"dateFomat": "DD-MM-YYYY"
})
}
});
var settings_view = new SettingsView();
settings_view.saveSettings();
http://jsfiddle.net/ovg3kyqz/2/
当我调用 saveSettings 时,发出了后端不支持的 POST 请求。我需要提出 PUT 请求。我知道 Backbone 根据它的 id 决定模型是否是新的,如果是,将发送一个 PUT 请求
我可以设置
this.services.userSettingsService.set("id", 1)
然后在 saveSettings 上将发出 PUT 请求,但请求正文将包含 {id: 1,...} 这不是我真正想要的。
那么如何发出 PUT 请求而不在请求正文中包含 id?
您可以简单地将模型上的 isNew
method 覆盖为始终 return false
,从而始终发送 PUT
请求。像
var settingService = Backbone.Model.extend({
url: "usersettings",
isNew: function () {
return false;
}
});
覆盖 isNew
的替代方法(我发现更明确)是覆盖 model.sync:
var settingService = Backbone.Model.extend({
url: "usersettings",
sync: function(method) {
if (method === "create") {
arguments[0] = "update";
}
return Backbone.sync.apply(this, arguments);
}
});
我必须通过 backbone 拨打服务电话来更新用户设置。这是简化的代码:
var settingService = Backbone.Model.extend({
"url": "usersettings"
});
var SettingsView = Backbone.View.extend({
initialize: function() {
this.services = {
"userSettingsService": new settingService()
};
},
saveSettings: function() {
this.services.userSettingsService.save({
"currency": "USD",
"dateFomat": "DD-MM-YYYY"
})
}
});
var settings_view = new SettingsView();
settings_view.saveSettings();
http://jsfiddle.net/ovg3kyqz/2/
当我调用 saveSettings 时,发出了后端不支持的 POST 请求。我需要提出 PUT 请求。我知道 Backbone 根据它的 id 决定模型是否是新的,如果是,将发送一个 PUT 请求
我可以设置
this.services.userSettingsService.set("id", 1)
然后在 saveSettings 上将发出 PUT 请求,但请求正文将包含 {id: 1,...} 这不是我真正想要的。
那么如何发出 PUT 请求而不在请求正文中包含 id?
您可以简单地将模型上的 isNew
method 覆盖为始终 return false
,从而始终发送 PUT
请求。像
var settingService = Backbone.Model.extend({
url: "usersettings",
isNew: function () {
return false;
}
});
覆盖 isNew
的替代方法(我发现更明确)是覆盖 model.sync:
var settingService = Backbone.Model.extend({
url: "usersettings",
sync: function(method) {
if (method === "create") {
arguments[0] = "update";
}
return Backbone.sync.apply(this, arguments);
}
});