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