Rest 主干使用id属性发出PUT请求
当我尝试保存现有对象时,如下所示:Rest 主干使用id属性发出PUT请求,rest,backbone.js,put,Rest,Backbone.js,Put,当我尝试保存现有对象时,如下所示: this.model.set('name', $('#district-name').val()); this.model.save(); 主干向/api/districts/18发出PUT请求,并提供数据 id: 18 name: "qq3324" 但是id已经在url中,我不想在请求正文中发送它。使用补丁选项调用保存 调用model.save({patch:true})发出patch请求,仅包括已更改的 属性-这只影响要保存的当前调用,因此必须记住为每
this.model.set('name', $('#district-name').val());
this.model.save();
主干向/api/districts/18发出PUT请求,并提供数据
id: 18
name: "qq3324"
但是id已经在url中,我不想在请求正文中发送它。使用补丁选项调用保存
调用model.save({patch:true})
发出patch
请求,仅包括已更改的
属性-这只影响要保存的当前调用,因此必须记住为每个调用传递参数。此外,此磨机会导致补丁
请求,而不是放置
请求
编写自己的Backbone.sync的实现
主干网。主干网使用sync
与RESTful API通信。覆盖Backbone.sync
方法以在发出PUT
请求时排除ID-此解决方案在全局范围内有效。有关此方法的实现,请参见主干注释源:
覆盖模型的toJSON
方法
Backbone.sync
调用模型的model.toJSON
方法,该方法被传递一个options对象(与您给model.save
函数的options对象相同)。您可以覆盖此函数以获取指示应排除ID的参数。如果总是扩展BaseModel
而不是Backbone.Model
,则这可以在全局范围内工作
var BaseModel = Backbone.Model.extend({
toJSON: function (options) {
var data = _.clone(this.attributes);
if (options.excludeId) {
data = _.omit(data, 'id');
}
return data;
}
});
var SomeModel = BaseModel.extend({});
new SomeModel({ ... }).save({ excludeId: true });
或
或者,忽略服务器端的ID。为什么会出现这个问题?您不能在服务器端忽略它吗?在服务器端工作验证程序上,它不是传递额外的参数。这与我无关。在执行此.model.save()
之前删除此.model.id
,这将导致主干向'/api/districts'
发送post请求。这只是一个可行的建议-根据您的需要,第二个或第三个选项可能比第一个更适合您。正如您所说,您对后端没有影响,要问的问题是“我的后端可以处理补丁请求吗?”