ICode9

精准搜索请尝试: 精确搜索
首页 > 编程语言> 文章详细

javascript-使LocalStorageProxy与TreeStore一起使用

2019-12-08 10:34:33  阅读:381  来源: 互联网

标签:extjs local-storage sencha-touch javascript


你好,

我正在构建一个使用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

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有