我正在尝试学习Backbone.js并且遇到了问题。 model.save没有更新我的模型值,虽然model.fetch更新了值。
请参阅下面的代码,如果我在这里做错了,请告诉我:
模型
var Person = Backbone.Model.extend({
url: "CreatePerson",
defaults: {
name: "",
age: 0
},
initialize: function(){
this.on("change:name",function(){
alert("Updated value is: "+this.get("name"));
});
}
});
我在html页面上创建了这个模型的实例,下面是代码:
var person = new Person({name:"manish"});
person.save(person,{
wait: true,
success: function(){
alert("Data saved: "+person.toJSON().name);
},
error: function(){
alert("Sorry, something wrong went with the system");
}
});
person.fetch({
success: function(){
alert("Data Fetched: "+person.get("name"));
}
});
在save和fetch上,我从服务器返回以下JSON数据:
{"name":"Logan","age":23}
有趣的是,对于save,更改事件不会被触发,警报框会给我旧模型值(即manish),而当执行fetch函数时,会触发change事件并且fetch回调会给我新值(即洛根)。
有人可以帮助我确定我在这里做错了吗?
答案 0 :(得分:1)
来自backbonejs.org
http://backbonejs.org/#Model-save
使用新属性调用save将导致“更改”事件 立即和服务器确认后的“同步”事件 成功的改变。如果您想等待,请通过{wait:true} 在模型上设置新属性之前的服务器。
听起来服务器没有返回它已完成。删除wait:true应该使更改的事件触发。
答案 1 :(得分:0)
您的代码中存在错误:
person.save(person,{
您应该为保存调用或仅选项提供属性对象,而不是模型本身。删除person,
并检查其是否有效。应设置wait:true
,以确保您更改为服务器验证的正确数据。