Javascript backbonejs POSTinstead启动保存
我在尝试将任务模型更新到数据库时遇到问题。它的行为就像是一个新的模式。我在保存后也得到了一个可能相关的错误?错误和代码如下。是否需要其他信息 我看了这个,但我已经确保我使用id属性 错误:Javascript backbonejs POSTinstead启动保存,javascript,backbone.js,Javascript,Backbone.js,我在尝试将任务模型更新到数据库时遇到问题。它的行为就像是一个新的模式。我在保存后也得到了一个可能相关的错误?错误和代码如下。是否需要其他信息 我看了这个,但我已经确保我使用id属性 错误: Uncaught TypeError: Object function (obj) { return new wrapper(obj); } has no method 'has' _.extend.setbackbone.js:246 _.extend.save.options.successbackbon
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
代码:
我不确定你的错误是什么。如果模型设置了id,则isNew()应返回false。检查模型上的“idAttribute”,并确保已在模型上设置此值 确实存在的一个问题是save()方法是异步的。如果要在保存任务时呈现TaskView,则应添加成功处理程序(如果失败,则添加错误处理程序),例如
我发现这个问题。。。在我使用的文本中,措辞被替换。它们处理POST as update和PUT as new。没问题,请注意,在您的示例中,名称将在视图中正确更新,但是在更复杂的示例中,服务器更新其他属性时,这很有用。如果保存失败,错误处理程序应该在那里。是的,我前几天刚刚实现了这个,并基于回调更改了视图呈现。
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();
}
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
}
});