在保存时,骨干js POST而不是PUT

时间:2012-02-08 21:16:37

标签: javascript backbone.js

当我尝试将任务模型更新到数据库时,我遇到了问题。它就好像是一个新模型。保存后我也会收到错误可能有关系吗?错误和代码如下。是否还需要其他信息?

我查看了这个question related to my question,但我确保使用id属性。

错误:

Uncaught TypeError: Object function (obj) { return new wrapper(obj); } has no method 'has'
_.extend.setbackbone.js:246
_.extend.save.options.successbackbone.js:308
jQuery.Callbacks.firejquery.js:1046
jQuery.Callbacks.self.fireWithjquery.js:1164
donejquery.js:7399
jQuery.ajaxTransport.send.callback

代码:

Update: function(id) {
            console.log('Updating task');
            this.task = this.taskList.get(id);
            var new_task_name = prompt("enter new name for " + this.task.get("name"),"Default...");
            console.log('saving task ' + this.task.id +': '+ this.task.get("name") + ' isNew? -' + this.task.isNew());
            this.task.save({
                name: new_task_name
            });
            console.log('task saved ' + this.task.id +': '+ this.task.get("name") + ' isNew? -' + this.task.isNew());

            this.taskView = new TaskView({
                model: this.task
            });
            this.taskView.render();
        }

2 个答案:

答案 0 :(得分:1)

我不确定你的错误是什么。如果模型具有id设置,则isNew()应返回false。检查模型上的'idAttribute',并在模型上设置此值。

您遇到的一个问题是save()方法是异步的。如果要在保存任务时呈现TaskView,则应添加成功处理程序(如果失败则添加错误处理程序),例如。

var me = this;
this.task.save({
    name: new_task_name
}, {
    success: function(task, response) {
        console.log('task saved ' + task.id +': '+ task.get("name") + ' isNew? -' + task.isNew());

        me.taskView = new TaskView({
            model: task
        });
        me.taskView.render();
    },
    error: function(model, response) {
        var errorMsg;
        // Response may be string (if failed model validation) or an AJAX response (if failed server side)
        if (_.isString(response))
            errorMsg = response;
        else
            errorMsg = response.responseText;

        // Display error
    }
});

答案 1 :(得分:0)

我发现了问题......我正在使用的Codeigniter restful API中交换了措辞。他们将POST作为更新处理,将PUT作为新处理。