To trochę dziwne. Używam Backbone i Backbone.localStorage do zapisywania danych zdalnych do pamięci lokalnej w celu buforowania. Całkiem standardowe rzeczy.Po wyczyszczeniu localStorage zapamiętuje poprzednie wartości.
Po uruchomieniu localStorage.clear()
w całym magazynie wszystkie wartości są usuwane na stałe, za wyjątkiem klucza z tablicą tekstową z wartościami. Zostaje wyczyszczona podczas pierwszej inspekcji, ale gdy pamięć zostanie zapisana ponownie z Backbone.LocalStorage.sync('create', model);
, poprzednie wartości są tam ponownie.
Oczywiście, jeśli ręcznie usunę klucz w Narzędziach dla programistów Chrome, zostanie on usunięty i nie będzie ponownie wypełniany. To tak, jakby wywołanie localStorage.clear()
nadal buforuje klucze z tablicą ciągów. Potwierdziłem, że jest początkowo wyczyszczony przy starcie aplikacji.
Umieszczę tutaj kod i zrzuty ekranu tutaj, ale naprawdę jest to dość standardowe, z wyjątkiem faktu, że te wartości pozostają po ponownym wypełnieniu klucza. Jakieś pomysły tutaj?
EDIT: Dużo kodu zabawy spojrzeć na:
Kolekcja:
app.DiagnosisCollection = Backbone.Collection.extend({
model: DiagnosisModel,
localStorage: new Backbone.LocalStorage('diagnosis'),
save: function(model) {
Backbone.LocalStorage.sync('create', model);
}
});
Model:
app.DiagnosisModel = Backbone.Model.extend({
urlRoot: app.ApiRoot,
url: app.DiagnosisApi,
initialize: function(options) {
if(!options.query) {
throw 'query must be passed to diagnosisModel';
}
this.local = false;
this._query = options.query;
},
sync: function(method, model, options) {
var diagnosisKey = localStorage.getItem('diagnosis');
var index, diagnosisStore;
if(diagnosisKey) {
diagnosisKey = diagnosisKey.split(',');
}
index = _.indexOf(diagnosisKey, this._query);
if(index !== -1) {
diagnosisStore = localStorage.getItem('diagnosis' + '-' + diagnosisKey[index]);
}
if(diagnosisStore) {
this.local = true;
options.success(JSON.parse(diagnosisStore));
}
else {
this.local = false;
var fetchUrl = this.urlRoot + this.url + this._query;
$.getJSON(fetchUrl, function(data, textStatus) {
if(textStatus !== 'success') {
options.error();
}
options.success(data);
});
}
}
});
return app.DiagnosisModel;
funkcja kontrolera, który działa:
var self = this;
// Create a new collection if we don't already have one
// The save function puts it in local storage
if(!this.diagnosisCollection) {
this.diagnosisCollection = new DiagnosisCollection();
this.diagnosisCollection.on('add', function(diagModel) {
this.save(diagModel);
});
}
var diagModel = new DiagnosisModel({
query: diagId
});
diagModel.fetch({
success: function() {
var diagView = new DiagnosisView({
model: diagModel
});
if(!diagModel.local) {
self.diagnosisCollection.add(diagModel);
}
self._switchPage(diagView);
},
error: function() {
console.error("Diag Model Fetch Failed");
Backbone.history.navigate('503', { trigger: true });
}
});
Przez sposób, localStorage.clear()
połączenie jest w uruchomieniu aplikacji. Wykonuje wywołanie API, aby sprawdzić, czy wersja na serwerze uległa zmianie. Jeśli wersja się zmieniła, to nuke localStorage.
Jest ona taka sama we wszystkich przeglądarkach http://jsfiddle.net/ Antonimo/EVUHy/ – Hontoni
Jesteś wyczyszczenie go z natywnym 'localStorage.clear()', ale pisząc do localStorage z 'Backbone.LocalStorage.sync', moje założenie byłoby, że trzon jest przechowywanie kopii danych w pamięci, to nie wie, że wyczyściłeś localStorage przy użyciu natywnej metody, więc zapisuje wszystko z powrotem do localStorage po wywołaniu '.sync'' localStorage.clear() 'jest wywoływane w" app start ", to jest zanim inicjuje się Backbone - Jeśli Backbone ładuje się przed wywołaniem, prawdopodobnie odczytał już dane z localStorage w swojej pamięci ten punkt. –
otwórz narzędzia chrome dev i wyczyść magazyn lokalny. Zasoby -> Localstorage – Deeptechtons