Работа с проблемой 2 html5 приложений Localstorage - PullRequest
0 голосов
/ 27 сентября 2011

Итак, я работал с двумя различными приложениями Localstorage для задачи, которую мне дали.Один из них представляет собой список задач, а другой - заметки, которые работают с одним и тем же html-файлом.

Теперь список задач имеет 3 ключа localstrorage.Один за ценность todo.Во-вторых, для порядка задач (который является первым, вторым, третьим и т. Д.) И В-третьих, сколько задач вы имеете в целом.Так что это 3 разных значения.

Для заметок 1 ключ localalstorage со всеми его значениями.(см. изображение ниже)

Теперь проблема в том, что: если, например, у меня есть 3 заметки, а затем я добавляю задачу, я получаю это в локальном хранилище:

enter image description here

это работает нормально.

Но, если я добавлю еще две заметки, я получу это:

enter image description here

, что логично, хотя последнеедве заметки не отображаются.

Другой пример: enter image description here

Это не будет отображать какие-либо заметки, хотя есть 4.

Я не уверен, как это объяснить, но в основном происходит то, что то, что когда-либо пишется в локальном хранилище после todo-ID, не показывает, но обратите внимание, что todoList продолжает работать отлично.

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

Итак, вот как я загружаю заметки:

var initStickies = function initStickies() {
    $("<div />", { 
        text : "+", 
        "class" : "add-sticky",
        click : function () { createSticky(); }
    }).prependTo(document.body);
    initStickies = null;
},
openStickies = function openStickies() {
    initStickies && initStickies();
    for (var i = 0; i < localStorage.length; i++) {
        createSticky(JSON.parse(localStorage.getItem(localStorage.key(i))));
    }
}

и вот как я загружаю список задач:

orderList = localStorage.getItem('todo-orders');

orderList = orderList ? orderList.split(',') : [];

for( j = 0, k = orderList.length; j < k; j++) {
    $itemList.append(
        "<li id='" + orderList[j] + "'>"
        + "<span class='editable'>" 
        + localStorage.getItem(orderList[j]) 
        + "</span> <a href='#'>X</a></li>"
    );
}

Что запроблема может быть?У кого-нибудь была такая проблема раньше?

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

1 Ответ

0 голосов
/ 27 сентября 2011

В вашем приложении заметок вы пытаетесь перебрать все элементы в localStorage и проанализировать их как JSON. Когда он получает строку JSON, он успешно анализирует ее и продолжает свою работу. Когда он получает ваш предмет, он ломается и перестает работать. Если вы хотите, чтобы и todo, и note находились в одном localStorage, вам лучше найти разницу. Одним простым способом является использование todo- в качестве префикса для элемента todo (как вы уже сделали) и note- в качестве префикса для элемента примечания.

Одним из возможных быстрых решений для вашего кода является использование try ... catch ..., чтобы избежать не-JSON-строк, нарушающих вашу итерацию:

for (var i = 0; i < localStorage.length; i++) {
    try {
        createSticky(JSON.parse(localStorage.getItem(localStorage.key(i))));
    } catch (error) { /* do nothing and just skip */ }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...