2

アプリでbackbone.localStorage.jsプラグインを使用したいのですが、コード サンプルは次のとおりです。

Module.Vehicles = Backbone.Collection.extend({
        initialize : function(options) {
            this.customerId = options.customerId;
        },
        url : function() {
            var url = App.Config.RESTPath + '/vehicle';
            if(this.customerId) {
                url = url + '?customerId='+this.customerId;
            }
            return url;
        },
        localStorage: new Backbone.LocalStorage("vehicles"),
        model : Module.Vehicle,
        parse : function(response) {
            this.allVehiclesNumber = response.allVehiclesNumber;
            this.customers = response.customers;
            return response.vehicles;
        }
    });

    Module.getVehicles = function(customerId) {
        var result = new Module.Vehicles({
            'customerId' : customerId
        });
        result.fetch();
        return result;
    };

行にコメントを追加すると、すべてがうまく機能します (コレクションには適切なレコードがあります)。

localStorage: new Backbone.LocalStorage("vehicles"),

しかし、commentend でない場合、recordsfetch はありません。

私が逃したものは何ですか?

BR、トマシュ。

4

1 に答える 1

0

Backbone.localStorageソース コードを確認すると、Backbone がデータを同期する方法がオーバーライドされていることがわかりlocalStorageます。モデル/コレクションで が宣言されている場合、通常の同期は破棄され、ローカル ストレージに置き換えられます。

独自の custom を提供することで、この動作を変更できますBackbone.sync。たとえば、これは両方のバージョンを使用します。

Backbone.sync = function(method, model, options) {
  if(model.localStorage || (model.collection && model.collection.localStorage)) {
    Backbone.localSync.call(this, method, model, options);
  }

  return Backbone.ajaxSync.call(this, method, model, options);
};

そしてhttp://jsfiddle.net/nikoshr/F7Hkw/で遊ぶフィドル

于 2014-01-03T09:20:59.500 に答える