Backbone.sync覆盖dataType

时间:2012-11-26 20:35:08

标签: javascript jquery backbone.js

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

1 个答案:

答案 0 :(得分:1)

不是改变主干的核心,也不是仅仅为了改变dataType而复制整个同步方法,你可以使用一个名为ajaxPrefilter的jQuery不是众所周知的函数。

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

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

我不确定这是否可以使用zepto.js。