2017-04-23 74 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)。你应该注意并接受他的。 –