首先 - annotated source是寻找有关骨干问题的答案的最佳位置。在源
寻找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,
...
});
谢谢!我为Backbone使用localStorage适配器,它不调用toJSON方法。我已经手动修补它,我也会检查如何将它推向上游 – Andrea 2012-01-11 15:39:19