1

我有一个可以包含大量文本数据的 Backbone 模型,需要将其发送回服务器以更新数据库中的行。

然而,这很好用,因为模型可以包含大量数据,URL 很可能太长而无法作为PUT请求发送。

相反,我需要以某种方式覆盖该函数,以便在不修改 URL 参数的情况下Backbone#save将数据作为请求发送。POST

理想情况下,这只需要应用于一个模型。

4

2 回答 2

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();
于 2013-10-18T11:56:33.147 回答
1

脑海中浮现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);
    }
});
于 2013-10-19T03:09:29.840 回答