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", потому что это то, что я думал о документе, но я мог ошибаться.
Посмотрите