#javascript #sencha-touch #local-storage #extjs
#javascript #сенча-касание #local-storage #extjs
Вопрос:
Привет,
Я создаю приложение Sencha Touch для iPhone, которое использует хранилище данных, которое прекрасно работает с вложенным списком, но я уперся в стену.
Ему нужен способ считывать данные из статического хранилища (TreeStore), загружать их в localStorage, чтобы они были доступны для записи, а затем сохранять некоторые пользовательские настройки. Я выяснил, что localStorageProxy, скорее всего, то, что мне нужно (я с облегчением обнаружил, что мне не пришлось сериализовать и десериализовать хранилище JSON вручную!) но после прочтения документации по нему и нескольких неудачных попыток я в растерянности.
В нынешнем виде он генерирует хранилище localStorage …, но оно пустое, я думаю, это потому, что я ничего в него не загружал, но при выполнении app.stores.event_store.load();
экран остается пустым, и консоль показывает, что localStorage пуст без ошибок.
Моя модель:
Ext.regModel('События', { поля: [ {имя: 'текст', тип: 'строка'}, {имя: 'info', тип: 'string'}, {имя: 'attend', тип: 'boolean', значение по умолчанию: 'false'} ] });
Мой магазин:
app.stores.event_store = новые внешние данные.Хранилище данных ({ модель: 'События', root: данные, StoreID: 'eventStoreId', прокси: { введите: 'localstorage', идентификатор: 'eventsAttending', url: 'store.js ', читатель: { тип: 'дерево', root: 'элементы' } } }); app.stores.event_store.load();
Вероятно, это связано с отсутствием фундаментального понимания того, как взаимодействуют эти модели и хранилища, но если кто-нибудь может помочь, вам будет послана хорошая карма.
Полное приложение можно найти в его репозитории на GitHub.
-fetimo
Ответ №1:
Хранилище дерева ожидает иерархические данные
var data= {
text: 'Groceries',
items: [{
text: 'Drinks',
items: [{
text: 'Water',
items: [{
text: 'Sparkling',
leaf: true
},{
text: 'Still',
leaf: true
}]
},{
text: 'Coffee',
leaf: true
}]
}]
}
Но LocalStorageProxy не может соответствовать модели для этой структуры данных.
Я бы использовал AJAX-запрос для загрузки «store.js » файл, использующий localStorage непосредственно для «хранения» большого двоичного объекта данных.
Ext.Ajax.request({
url: 'store.js',
success: function(response, opts) {
localStorage.StoreJSBlob = response.responseText;
}
});
тогда ваше хранилище будет выглядеть примерно так:
var store = new Ext.data.TreeStore({
model: 'Events',
root: localStore.StoreJSBlob,
proxy: {
type: 'ajax',
reader: {
type: 'tree',
root: 'items'
}
}
});
Вам просто нужно правильно связать события вместе, так как асинхронные вызовы могут сбить вас с толку
Комментарии:
1. Я боялся, что это единственный выход. Какой позор. И я потратил слишком много времени на то, чтобы заставить хранилище localStorage работать с моим базовым списком!