使用backbone.js我正在保存模型.将PUT发送到服务器并返回响应.我第一次这样做,它返回成功,以下时间返回一个错误,因为在第一次将响应添加到模型之后.
在Backbone.js中保存功能:
saveCountry: function() {
this.model.save({},{
success: function(model, response) {
console.log('success! ' + response);
},
error: function(model, response) {
console.log('error! ' + response);
}
});
this.render();
return false;
},
Run Code Online (Sandbox Code Playgroud)
PHP返回一个JSON字符串:
{"response": "Model saved!"}
Run Code Online (Sandbox Code Playgroud)
在PUT之后得到一个错误作为响应,因为"响应"被添加到模型中:
Unknown column 'response' in 'field list'
Run Code Online (Sandbox Code Playgroud)
为什么响应会添加到模型中,我该如何预防?
来自Backbone关于模型的文档save:
设置模型属性的哈希值,并将模型同步到服务器.如果服务器返回不同的属性哈希,则将再次设置模型的状态. http://documentcloud.github.com/backbone/docs/backbone.html#section-41
如何使其工作:不要从服务器返回{"response":"Model saved!"}.只返回没有内容的成功(状态200).
如果保存不起作用,则返回带有错误的JSON,Backbone将使用您提供的JSON触发模型上的错误事件(请参阅http://documentcloud.github.com/backbone/docs/backbone.html#第41节和http://documentcloud.github.com/backbone/docs/backbone.html#section-145).
只是为了复活一个古老的线索......
并不总是可以/希望更改从服务器返回的响应.
另一个解决方案是覆盖模型中的解析来处理这个问题.对于您的情况,响应不适合您的所有模型,您可以在超类中执行.
MyModel = Backbone.Model.extend({
parse: function(data) {
delete data["success"];
return data;
}
});
Address = MyModel.extend({
saveCountry: function() {
this.model.save({},{
success: function(model, response) {
console.log('success! ' + response);
},
error: function(model, response) {
console.log('error! ' + response);
}
});
this.render();
return false;
},
...
});
Run Code Online (Sandbox Code Playgroud)