编程语言
首页 > 编程语言> > javascript-使LocalStorageProxy与TreeStore一起使用

javascript-使LocalStorageProxy与TreeStore一起使用

作者:互联网

你好,

我正在构建一个使用TreeStore的Sencha Touch iPhone应用程序,该应用程序可以很好地与NestedList配合使用,但是我碰到了墙.

它需要一种方法来读取静态存储区(TreeStore)中的数据,将其加载到localStorage中以使其可写,然后保存一些用户首选项.我已经发现localStorageProxy很可能是我所需要的(我松了一口气,发现我不必手动对JSON存储进行序列化和反序列化!),但是在阅读了文档并尝试了一些失败之后,茫然.

就目前而言,它会生成localStorage…存储,但是它是空的,我想这是因为除了执行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();

这可能是由于缺乏对这些模型和商店如何相互作用的基本了解,但是如果有人可以提供帮助,则会向您发送良好的业障.

完整的应用程序可以在it’s GitHub repo中找到.

-fetimo

解决方法:

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请求直接使用localStorage加载“ store.js”文件来“存储”数据blob.

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

您只需要正确地将事件链接在一起即可,因为异步调用可能会使您崩溃

标签:extjs,local-storage,sencha-touch,javascript
来源: https://codeday.me/bug/20191208/2090830.html