我有一个可以包含大量文本数据的骨干模型,需要将其发送回服务器以更新数据库中的行。
但是,这很好用,因为模型可以包含大量数据,因此 URL 很可能太长而无法作为PUT
请求发送。
相反,我需要以某种方式覆盖 Backbone#save
函数,将数据作为POST
请求发送,而无需修改 URL 参数。
理想情况下,这只需要应用于一个模型。
你可以覆盖给定模型的Model.sync,如下所示
var oldSync = Backbone.Model.prototype.sync;
var MyModel = Backbone.Model.extend({
urlRoot:'someurl',
sync:function(method, model){
var args = _.toArray(arguments);
console.log(args);
if(method === 'update'){
args[0]='create';
}
oldSync.apply(this, args);
}
})
var model = new MyModel({id:'json'})
model.save();
脑
海中弹出了3个选项。
1.这应该有效。
model.save(null, {type: "POST"});
2.另一个黑客是,如果你不考虑id
。
model.id = null;
model.save();
3.否则,像这样覆盖。
var TextModel = Backbone.Model.extend({
sync:function(){
if (arguments[0] === "update" || arguments[0] === "patch") {
arguments[0] = "create";
}
Backbone.sync.apply(this, arguments);
}
});