Backbone.js - model.save()没有触发PUT请求

The*_*rez 12 put backbone.js backbone-model

我有一个使用Backbone.js的基本应用程序,它没有进行PUT调用(更新模型).从前端开始,我调用模型save函数不会进行PUT调用; 但是,如果我用它替换它destroy,它会对后端进行DELETE调用.任何人都知道可能是什么问题?未触发PUT请求的saveTask功能是该功能.

App.Views.Task = Backbone.View.extend({
    template: _.template("<label>ID:</label><input type='text' id='taskId' name='id' value='<%= _id %>' disabled /><br><label>Title:</label><input type='text' id='title' name='title' value='<%= title %>' required/><br><label>Content:</label><input type='text' id='content' name='content' value='<%= content %>'/><br><button class='save'>Save</button>"),
    events: {
        "change input":"change",
        "click .save":"saveTask"
    },
    render: function(eventName){
        $(this.el).html(this.template(this.model.toJSON()));
        //console.log(this.generateTemplate());
        return this;
    },
    change: function(event){
        var target = event.target;
        console.log('changing ' + target.id + ' from: ' + target.defaultValue + ' to: ' + target.value);
        change[target.name] = target.value;
        this.model.set(change);*/
    },
    saveTask: function(){
        this.model.set({
            title:$("#title").val(),
            content:$("#content").val()
        });
        if(this.model.isNew()){
            App.taskList.create(this.model);
        } else {
            this.model.save({});
        }
    }
});
Run Code Online (Sandbox Code Playgroud)

Ray*_*_on 19

如果您的模型是新的,那么在您保存它时它将触发一个post方法.如果您的模型不是新的并且您正在更新它,它将触发PUT.

如果这对您不起作用,可能是因为您的模型没有id属性,以防您使用具有不同名称的id,例如taskID,那么在您的模型中,您必须将idAttribute设置为taskID,因此使用此属性作为Id,一切都将正常.

像这样:

 var Task= Backbone.Model.extend({
   idAttribute: "taskId"
 });
Run Code Online (Sandbox Code Playgroud)

这里是Idattibute http://backbonejs.org/#Model-idAttribute文档的链接

另一个问题可能是保存通话中的{}只是

 this.model.save(); 
Run Code Online (Sandbox Code Playgroud)

代替

 this.model.save({});
Run Code Online (Sandbox Code Playgroud)