迫使Backbone.sync更新使用POST而不是PUT的最难看的方法是什么?

aw *_*rud 22 javascript backbone.js

我的一些Backbone模型应始终使用POST,而不是POST用于创建和PUT用于更新.我坚持使用这些模型的服务器能够支持所有其他动词,因此使用Backbone.emulateHTTP也不是一个完美的解决方案.

目前我覆盖了isNew这些模型的方法并让它返回true,但这并不理想.

除了直接修改backbone.js代码之外,还有一种简单的方法可以逐个模型地实现这个目标吗?我的一些模型可以使用PUT(它们被持久化到支持所有动词的不同服务器,包括PUT),因此将Backbone.sync替换为将'update'方法转换为'create'的服务器也不理想.

And*_*uín 56

对于需要直接强制对实例发出POST/PUT请求的任何人:

thing = new ModelThing({ id: 1 });
thing.save({}, { // options
    type: 'post' // or put, whatever you need
})
Run Code Online (Sandbox Code Playgroud)

  • 我用这个而不是接受的答案,它完美地运作. (3认同)

Maa*_*oyy 15

Short和Sweet被置于Top

Backbone.emulateHTTP = true;
Run Code Online (Sandbox Code Playgroud)

这将使用Get for Pull和Post for All推送(读取创建,更新,删除)


Pau*_*aul 8

将同步(方法,模型,[选项])直接添加到您需要覆盖的模型中.

YourModel = Backbone.Model.extend({
  sync: function(method, model, options) {
    //perform the ajax call stuff
  }
}
Run Code Online (Sandbox Code Playgroud)

以下是一些更多信息:http://documentcloud.github.com/backbone/#Sync


Sco*_*den 5

我这样做的方式是sync()如此改写

Models.Thing = Backbone.Model.extend({
    initialize: function() {
        this.url = "/api/thing/" + this.id;
    },
    sync: function(method, model, options) {
        if (method === "read") method = "create";    // turns GET into POST
        return Backbone.sync(method, model, options);
    },
    defaults: {
        ...
Run Code Online (Sandbox Code Playgroud)