2016-08-29 84 views
2

我必须与骨干进行服务呼叫才能更新用户设置。这里是简化代码:用骨干发送PUT请求

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/

当我打电话的POST请求时saveSettings未通过后台支持。我需要做PUT请求。我知道,骨干决定模型是否是新的基于其ID,如果这样会发送一个PUT请求

我可以设置

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

,然后saveSettings一个PUT请求将被提出,但该请求身体会有{id:1,...}这不是我想要的。

那么我该如何做一个PUT请求并且不在请求体中包含id?

回答

1

另一种东西覆盖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/

2

您可以简单地覆盖模型上的isNew method,始终返回false,因此始终发送PUT请求。像

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

并演示http://jsfiddle.net/ehhwqm70/