Получение LocalStorageProxy, работающего с TreeStore - PullRequest
3 голосов
/ 28 мая 2011

Привет,

Я создаю приложение Sencha Touch для iPhone, в котором используется TreeStore, который прекрасно работает с NestedList, но я столкнулся со стеной.

Ему нужен способ чтенияданные в статическом хранилище (TreeStore), загрузите их в localStorage, чтобы их можно было записать, а затем сохраните некоторые пользовательские настройки.Я понял, что localStorageProxy - это, скорее всего, то, что мне нужно (я с облегчением обнаружил, что мне не нужно было сериализовать и десериализовать хранилище JSON вручную!), Но после прочтения документации по нему, попытки и сбоя нескольких вещей, которые яЯ в растерянности.

В существующем состоянии он генерирует локальное хранилище… хранилище, но оно пустое, наверное, потому, что я ничего не загрузил в него, но при выполнении app.stores.event_store.load(); экран пуст иКонсоль показывает, что localStorage пуст без ошибок.

Моя модель:

Ext.regModel('Events', {
    fields: [
        {name: 'text',      type: 'string'},
        {name: 'info',      type: 'string'},
        {name: 'attend',    type: 'boolean', defaultValue: 'false'}
    ]   
});

Мой магазин:

app.stores.event_store = new Ext.data.TreeStore({
    model: 'Events',
    root: data,
    storeId: 'eventStoreId',
    proxy: {
        type: 'localstorage',
        id: 'eventsAttending',
        url: 'store.js',
        reader: {
            type: 'tree',
            root: 'items'
        }
    }
});

app.stores.event_store.load();

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

Полное приложение можно найти на это GitHub repo .

-fetimo

1 Ответ

3 голосов
/ 30 мая 2011

TreeStore ожидает иерархические данные

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'
        }
    }
});

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...