Как очистить магистраль местного хранилища - PullRequest
8 голосов
/ 28 марта 2012

Javascript один кажется довольно простым, просто localStorage.clear ().

Есть ли что-то похожее на магистральное локальное хранилище, и если нет, может кто-нибудь указать мне правильное направление, как это сделатьэто.

Я думал о том, чтобы сделать что-то вроде этого:

localStorage.each (localStorage.delete (this))

за исключением того, что этот элемент не будет указыватьэто?

Ответы [ 4 ]

5 голосов
/ 24 сентября 2013

Я знаю, что это похоже на серьезное копание, но я некоторое время искал решение этой проблемы, и ни один из приведенных выше фрагментов не помог мне.Я всегда заканчивал тем, что размер коллекции уменьшался вдвое, независимо от того, как я это пробовал.

Так что после приличного количества игр я придумал это:

var length = collection.length;
for (var i = 0; i < length; i++) {
    collection.at(0).destroy();
}

Backbone удаляет элементы «на лету», поэтому если у вас есть 40 элементов, вы не сможете удалить 21. элемент, потому что осталось только 20 элементов.Как ни странно, это также, похоже, влияет на функцию collection.each (), которая мне действительно кажется ошибкой ..

5 голосов
/ 28 марта 2012

Несколько способов сделать это из коллекции, но какой бы способ вы ни выбрали, вам придется вызывать команду уничтожения для каждой модели, которая запустит синхронизацию и уничтожит ее как на стороне клиента, так и на стороне сервера (что действует localStorage а).

collection.each(function(model) {
      model.destroy();
    }
)

Обновление

По комментариям, похоже, это больше не работает. Поскольку это все еще помечено как ответ, включая ответ, который должен работать ниже, за skcin7.

while ((model=collection.shift())) 
    { model.destroy();
}
1 голос
/ 20 июля 2015

Если вы не хотите делать это программно, вы всегда можете открыть Режим разработчика (F12), перейти на вкладку Ресурсы, выбрать «Локальное хранилище» на левой панели и удалить записи.

Обновление: В более новых версиях Chrome вкладка Ресурсы была заменена вкладкой Приложение.

1 голос
/ 10 ноября 2013

Простая итерация по коллекции и вызов уничтожения для каждого элемента не сохраняются ни в коем случае.Причина в том, что итерация по измененной коллекции может привести к неожиданным результатам.

Лучше сначала клонировать коллекцию и выполнить итерацию по этому клону.Оформить заказ this.each неправильно повторять коллекцию для получения дополнительной информации.

Пример:

_.chain(Todos.models).clone().each(function(model){
  console.log('deleting model ' + model.id);
  model.destroy();
});
...