Несколько хранилищ с использованием localStorage - PullRequest
3 голосов
/ 15 мая 2010

Возможно ли, что одно и то же имя может иметь много разных значений, хранящихся отдельно и отображаться в списке?

например:.

function save()
{
    var inputfield = document.getElementById('field').innerHTML;
    localStorage['justified'] = inputfield;
}

<input type="text" id="field" onclick="save();" />

Каждый раз, когда кто-то вводит что-то в поле ввода и нажимает кнопку Сохранить, локальное хранилище будет сохранять только значение с тем же именем, однако противоречит ли это способу сохранения хранилища, например, замене на последнее входное значение?

Кроме того, есть ли способ предотвратить очистку локального хранилища при очистке кэша?

Ответы [ 3 ]

7 голосов
/ 15 мая 2010

На самом деле localStorage 'должен' быть способен хранить целые числа, строки и массивы. Я работал над приложением блокнота с использованием localStorage и сохранял все свои данные с использованием литералов объекта:

var someData = {
    withvars: "and values",
    init: function() {
        // not sure if this works but it should.
    },
    var1: {
        subvar1: "data",
        subvar2: "data2"
    }
};

Затем сохраните его с помощью JSON.stringify ():

localStorage.setItem(varName, JSON.stringify(someData));

Затем получите доступ к нему позже с помощью JSON.parse ():

var dataBack = JSON.parse(localStorage.getItem("varName"));

Если вы всегда используете литералы объектов, у вас будет меньше проблем с отслеживанием того, как хранить и как извлекать данные из localStorage.

1 голос
/ 15 мая 2010

Нет. Вы можете сохранить только одно значение в записи localStorage.

Существует два способа сохранить больше значений за одним ключевым словом:

  1. Используйте localStorage['justified_0'], localStorage['justified_1'] и так далее.
  2. Сохранение нескольких значений в массиве и преобразование его в JSON перед сохранением в localStorage['justified'] и преобразование обратно в массив после чтения.

Очистка кеша не очищает локальное хранилище.

1 голос
/ 15 мая 2010

Это очень легко определить с помощью очень простой тестовой страницы. Вы можете хранить только одно значение для каждого ключа, и значения не очищаются при очистке кэша. (Я только что попробовал Firefox ...)

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

function addToPersistentList(listName, value) {
  var val = localStorage[listName] || [];
  val.push(value);
  localStorage[listName] = val; // THIS DOES NOT WORK
}

edit К сожалению, он поддерживает только сохраненные строки; дерьмо. Хорошо, если у вас есть json2, вы бы сделали это:

function addToPersistentList(listName, value) {
  var val = localStorage[listName] ? JSON.parse(localStorage[listName]) : [];
  val.push(value.toString());
  localStorage[listName] = JSON.stringify(val);
}

Конечно, это вызывает проблемы, если вы хотите сохранить даты и т. Д.

...