当我尝试将任务模型更新到数据库时,我遇到了问题。它就好像是一个新模型。保存后我也会收到错误可能有关系吗?错误和代码如下。是否还需要其他信息?
我查看了这个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();
}
答案 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作为新处理。