我正在编写一个 Backbone 应用程序,我无法控制服务器返回的实体。
事实证明,拥有数据的内部表示形式与服务器使用的 JSON 略有不同对我来说很方便。在一个方向上,事情很简单:我可以编写一个 Model.parse()
方法,它将服务器返回的 JSON 作为输入并返回我的对象的属性。
我不太确定在另一个方向上该怎么做。我找不到在序列化我的对象以进行保存时调用的方法。有Model.toJSON()
但是在保存模型前好像没有用到
How am I supposed to handle this difference?
最佳答案
首先 - annotated source是查找有关 Backbone 问题的答案的最佳场所。
查看 Backbone.sync
的源代码,您可以看到模型是使用 JSON.stringify(model.toJSON())
序列化的(假设您没有使用emulateJSON
) 所以重写这个方法应该能达到你需要的效果。如果没有简化的测试用例,我无法解释为什么这对您不起作用。
更长的答案是,要完全控制服务器-客户端同步,您应该编写自己的 Backbone.sync 实现。该方法相当简单(请参阅带注释的源代码),如果您只想进行简单的更改,则可以简单地包装原始同步。
例如:
function mySyncFunction(method, model, options){
if(method == 'create' || method == 'update'){
options.contentType = 'application/json';
options.data = model.serializeForServer(); //You will need to write this method
}
return Backbone.sync(method, model, options);
}
要使用自定义同步方法,只需将其声明为模型的一部分
var myModel = Backbone.Model.extend({
...
"sync": mySyncFunction,
...
});
关于javascript - Backbone.js:如何处理模型和服务器响应之间的差异,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8817583/