Backbone save()方法Put的后插入

时间:2017-04-23 21:01:49

标签: javascript jquery backbone.js

我正在尝试更新主干上的数据。但是我的save()函数会发布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>

2 个答案:

答案 0 :(得分: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?

答案 1 :(得分:0)

我解决了使用id的问题。如果你尝试没有id的PUT请求,骨干思考&#34;它是一个新的模型&#34;但是你保存了数据的id值,骨干思考PUT请求。

这就是为什么我尝试将带有ID的请求放在那里,并且这已经有效了。

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