4

我正在构建一个使用 .CSV 文件作为主干模型数据源的应用程序。覆盖同步以使用数据类型“文本”而不​​是“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) );
},
4

1 回答 1

1

无需更改主干的核心,或复制整个同步方法来更改数据类型,您可以使用 jQuery 的一个不太知名的函数,称为ajaxPrefilter

Witch 允许您在创建之前更改 ajax 请求。很需要的功能。

jQuery.ajaxPrefilter(function( options ) {
    options.dataType = "mynewdatatype";
});

我不确定这是否适用于 zepto.js。

于 2012-11-26T20:57:36.853 回答