Коллекция магистрали не извлекается с помощью ajax, если установлен объект localStorage

Я хочу использовать плагин 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"),

Но если он не комментируется, то нет записей.

Что я пропустил?

BR, Томаш.

1 ответ

Если вы проверите Backbone.localStorage Исходный код, вы увидите, что он перекрывает способ синхронизации данных Backbone: если у вас есть localStorage объявленная в вашей модели / коллекции, обычная синхронизация отбрасывается и заменяется локальным хранилищем.

Вы можете изменить это поведение, предоставив свой собственный 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/

Другие вопросы по тегам