Коллекция магистрали не извлекается с помощью 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/