我正在构建一个使用 .CSV 文件作为 Backbone 模型数据源的应用程序。覆盖同步以使用数据类型“文本”而不是“json”的最佳方法是什么?寻找最佳实践等...
不幸的是,Backbone.sync 使用的“dataType”参数是硬编码的……并且不响应 options.dataType。有问题的代码片段可以在带注释的源代码中看到 - http://backbonejs.org/docs/backbone.html#section-166
这是我在我的模型上创建的同步方法。其中大部分是直接从 Backbone.sync 复制粘贴。我的模型也是只读的。
sync: function(method, model, options){
//overwrite sync to read a .CSV document. if
//the default Backbone sync would let you
//specify the "dataType" property, this wouldn't
//be necessary.
if(method === 'read'){
options || (options = {});
var success = options.success;
options.success = function(resp, status, xhr) {
if (success) success(json, status, xhr);
};
var params = {type: 'GET', dataType: 'text', url: this.url};
return $.ajax(_.extend(params, options));
}
},
我已经覆盖“解析”来处理 CSV 响应。
parse: function(data, xhr){
return $jQuery.parseJSON( CSVParser.toJSON(data) );
},
最佳答案
与其改变 Backbone 的核心,或者复制整个同步方法只是为了改变数据类型,不如使用 jQuery 的一个不太知名的函数 ajaxPrefilter .
Witch 允许您在发出 ajax 请求之前更改它。非常需要功能。
jQuery.ajaxPrefilter(function( options ) {
options.dataType = "mynewdatatype";
});
我不确定这是否适用于 zepto.js。
关于javascript - Backbone.sync 覆盖数据类型,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13572712/