2017-04-23 30 views
0

我試圖更新backbone.But上的數據,但我的save()函數發佈inse的put。骨幹保存()方法post post的巴達德Put

editEvent:function(e){ 
     var departments=new Department(); 
     departments.set("departmentName",this.$el.find(".departmentName").val()); 
      departments.save(); 

      this.render(); 

     }, 

departmentModel

var Department = Backbone.Model.extend({ 
    urlRoot: "/rest/department", 
    idAttribute:'departmentID' 

    } 
}); 
return Department; 

模板

<th> 
    <span>{{user.department.departmentName}}</span> 
    <input data-placement="top" title="Boş geçilemez!" class="form-control text-center departmentName" type='text' 
      style='display: none;' value='{{user.department.departmentName}}'/> 
</th> 
+0

我寫了一篇關於如何用骨幹強制POST請求的廣泛答案(http://stackoverflow.com/a/41091957/1218980)。大多數技術都可以用來強制PUT請求。 –

回答

2

這是由設計,這裏是從Backbone docs for the save function片段:

如果模型isNew,保存將是一個"create"(HTTP POST),如果服務器上已經存在 型號,則保存將是「更新」(HTTP PUT)。

如果模型沒有id,則認爲是「新」。

由於您是第一次創建模型,因此Backbone會使用POST方法,因爲這意味着您正在創建新資源。欲瞭解更多關於meaning of HTTP verbs的信息。

我的建議是在服務器端來解決這一點,並作出不同的處理程序POST和PUT,但如果你真的要強制PUT方法,這裏有一些提示:What is the least ugly way to force Backbone.sync updates to use POST instead of PUT?

0

我解決了這個問題,使用ID如果你嘗試了沒有id的PUT請求,backbone認爲「這是一個新模型」。但是你用數據的id值保存,backbone認爲PUT請求。

這就是爲什麼我試圖把id請求,這是行得通的。

departments.set("departmentID",this.$el.find(".departmentName").data("id")); 
      departments.set("departmentName",this.$el.find(".departmentName").val()); 
      departments.save(); 
+0

這就是[Mario的答案](http://stackoverflow.com/a/43582132/1218980)。你應該注意並接受他的。 –