4

バックボーン モデルのデータ ソースとして .CSV ファイルを使用するアプリケーションを構築しています。「json」ではなくdataType「text」を使用するように同期を上書きする最良の方法は何ですか? ベストプラクティスなどを探しています...

残念ながら、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」を上書きしました。

parse: function(data, xhr){
    return $jQuery.parseJSON( CSVParser.toJSON(data) );
},
4

1 に答える 1

1

バックボーンのコアを変更したり、dataTypeを変更するためだけに同期メソッド全体をコピーしたりする代わりに、 ajaxPrefilterと呼ばれるjQueryのあまり知られていない関数の1つを使用できます。

Witchを使用すると、ajaxリクエストを作成する直前に変更できます。かなり機能が必要です。

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

これがzepto.jsを使用して機能するかどうかはわかりません。

于 2012-11-26T20:57:36.853 に答える