Sencha Touch localstore proxy не удаляет индексы после удаленных записей

У меня возникают проблемы с хранилищем данных Sencha Touch и локальным прокси. В основном, когда запись удаляется из хранилища, используя метод store.remove(запись), сама запись удаляется из памяти, но ссылка Id на нее в хранилище не удаляется, поэтому, когда страница обновляется, я получить прекрасный "Uncaught TypeError: не удается прочитать свойство" isModel "из undefined"

Вот код для магазина:

Ext.define("App.store.Data", {
    extend: "Ext.data.Store",
    requires: "Ext.data.proxy.LocalStorage",
    config: {
        model: "App.model.Data",
        autoSync: true,
        proxy: {
            type: 'localstorage',
            id: 'app-store'
        }
    }
});

Вот код кнопки удаления на странице редактора данных

onDeleteHomeworkCommand: function () {

    var dataEditor = this.getDataEditor();
    var currentData = dataEditor.getRecord();
    var dataStore = Ext.getStore("Data");

    dataStore.remove(currentData);
    dataStore.sync();

    this.activateDataList();
},

Edit:

Вот скриншот хранилища данных до вызова метода remove: enter image description here

И вот один из них: enter image description here

Обратите внимание, что идентификатор остается в списке хранилища, что дает мне ошибку undefined, когда страница обновляется.

Ответы

Ответ 1

Проблема заключается в том, что прокси-сервер локального хранилища не удаляет идентификатор из своего внутреннего идентификационного списка при удалении записи. Вы можете решить эту проблему, если явным образом уничтожу запись в прокси с помощью destroy().

Ответ 2

это известная проблема с прокси-сервером localstorage и stores в sencha touch и происходит потому, что defualt sencha принимает идентификаторы int, и, следовательно, проблема возникает, когда они не являются. Я нашел решение этой проблемы на одном из форумов sencha, и это сработало для меня
это ссылка на этот поток http://www.sencha.com/forum/showthread.php?151741-remove-record-from-localstorage
и решение состоит в том, чтобы отредактировать строку кода в источнике sencha touch и вот что идет

И теперь я исправил проблему, когда иды не очищаются.

Существует использование getID, который возвращает Int, но список идентификаторов - это массив строк

//This line doesn't work circa 32196
Ext.Array.remove(newIds, records[i].getId());

//Replace it with this one works fine.
Ext.Array.remove(ids, records[i].getId().toString());

Это может быть потому, что моя модель использует "id" типа "int", потому что это то, что я думал о документе, но я мог ошибаться. Посмотрите