我有一个使用Backbone.js的基本应用程序,它没有进行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({});
}
}
});
4条答案
按热度按时间zu0ti5jz1#
如果你的模型是新的,那么在你保存它的时候,它会触发一个post方法。但是如果你的模型不是新的,并且你正在更新它,它会触发一个PUT方法。
如果这对你不起作用,那可能是因为你的模型没有id属性,如果你使用一个不同名字的id,比如taskID,那么在你的模型中你必须把idAttribute设置为taskID,这样 Backbone.js 就把这个属性作为Id,一切都正常了。
就像这样:
以下是Idattibute www.example.com上文档的链接http://backbonejs.org/#Model-idAttribute
另一个问题可能是{}在您的保存调用尝试只是
而不是
qlvxas9a2#
我相信模型总是期望选项参数,也可能是回调
如果你看一下Backbone src,你也会注意到...
pinkon5k3#
在我的例子中,由于验证的原因,它失败了。当我保存模型时,它验证了模型的所有属性,而我用于列表界面的集合并不需要模型的所有属性。
我也遇到了同样的问题,在谷歌搜索,找到了你的问题,阅读了解决方案和评论。然后我意识到,在更新的 Backbone.js 规范中提到,当model.save()在模型请求之前执行时,它首先调用validate,如果validate成功,它将继续,否则失败,这就是为什么它没有在chrome调试器网络选项卡中显示任何网络请求的原因。
我已经为我所面临的情况写了解决方案,其他人可能面临不同的问题。
ltskdhd14#
Backbone的sync函数是我最后使用的。你必须传入'update'作为第一个参数('method'参数)。