我有一个可以包含大量文本数据的Backbone模型,需要将其发送回服务器以更新数据库中的行。
但这很好用,因为该模型可能包含大量数据,因此该网址很可能太长而无法作为PUT
请求发送。
相反,我需要以某种方式覆盖Backbone#save
函数,以便在不修改URL参数的情况下将数据作为POST
请求发送。
理想情况下,这只需要应用于一个模型。
答案 0 :(得分:1)
您可以覆盖给定模型的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();
答案 1 :(得分:1)
出现了3个选项。
1.这应该有用。
model.save(null, {type: "POST"});
2.如果您不考虑id
,那么另一个黑客也是如此。
model.id = null;
model.save();
3.Else,覆盖这样。
var TextModel = Backbone.Model.extend({
sync:function(){
if (arguments[0] === "update" || arguments[0] === "patch") {
arguments[0] = "create";
}
Backbone.sync.apply(this, arguments);
}
});