使用 Backbone 发送 PUT 请求

Send PUT request with Backbone

我必须通过 backbone 拨打服务电话来更新用户设置。这是简化的代码:

var settingService = Backbone.Model.extend({
  "url": "usersettings"
});


var SettingsView = Backbone.View.extend({
  initialize: function() {
    this.services = {
      "userSettingsService": new settingService()
    };
  },
  saveSettings: function() {
    this.services.userSettingsService.save({
      "currency": "USD",
      "dateFomat": "DD-MM-YYYY"
    })
  }
});

var settings_view = new SettingsView();

settings_view.saveSettings();

http://jsfiddle.net/ovg3kyqz/2/

当我调用 saveSettings 时,发出了后端不支持的 POST 请求。我需要提出 PUT 请求。我知道 Backbone 根据它的 id 决定模型是否是新的,如果是,将发送一个 PUT 请求

我可以设置

this.services.userSettingsService.set("id", 1)

然后在 saveSettings 上将发出 PUT 请求,但请求正文将包含 {id: 1,...} 这不是我真正想要的。

那么如何发出 PUT 请求而不在请求正文中包含 id?

您可以简单地将模型上的 isNew method 覆盖为始终 return false,从而始终发送 PUT 请求。像

var settingService = Backbone.Model.extend({
    url: "usersettings",
    isNew: function () {
        return false;
    }
});

还有一个演示 http://jsfiddle.net/ehhwqm70/

覆盖 isNew 的替代方法(我发现更明确)是覆盖 model.sync:

var settingService = Backbone.Model.extend({
  url: "usersettings",
  sync: function(method) {
    if (method === "create") {
      arguments[0] = "update";
    }
    return Backbone.sync.apply(this, arguments);
  }
});

演示:http://jsfiddle.net/pytpfnar/1/