虽然Sencha Touch本身有和Store关联的LocalStorageProxy,但是使用起来限制性较大,比如复杂的TreeStore就没法正常使用。
所以,我使用灵活性更好的Html5标准LocalStorage。
下面举例说明用法:
首先在App.js中声明全局LocalStorage变量:
- Ext.application({
- name : 'MobileOA',
- platform : typeof WL === 'undefined' ? "" : WL.Client.getEnvironment(),
- // loads the views used by the app from the app/view folder
- views : [],
- // loads app/store/Demos.js, which contains the tree data for our main
- // navigation NestedList
- stores : [ 'Navs', 'Attachments', 'ToDos', 'CompanyDocuments', 'DeptDocuments', 'Depts', 'MoreItems' ],
- // of device detected
- profiles : [ 'Tablet', 'Phone' ],
- // 本地存储
- localStorage : window.localStorage
- )}
然后自定义一个所有Controller的基类BaseController,在里面添加Set和Get方法,方便其它Controller调用存取持久化内容。
- /**
- * @class MobileOA.controller.BaseController
- * @extends Ext.app.Controller
- */
- Ext.define('MobileOA.controller.BaseController', {
- extend : 'Ext.app.Controller',
- /**
- * 控制所有页面的创建显示
- */
- showView : function(navigation, name) {
- console.log(name);
- var view = Ext.create("MobileOA.view." + name);
- navigation.push(view);
- },
- animateView : function(name, animate, direction) {
- console.log(name);
- var view = Ext.create("MobileOA.view." + name);
- Ext.Viewport.animateActiveItem(view, {
- type : animate,
- direction : direction
- });
- },
- /**
- * NavigationView Pop View
- */
- pop : function(navigation, count) {
- // var count = arguments[0] ? arguments[0] : 0;
- if (!count)
- count = 0;
- navigation.pop(count);
- },
- /**
- * 保存本地存储
- */
- storeSet : function(key, value) {
- this.getApplication().localStorage.setItem(key, value);
- },
- /**
- * 获取本地存储
- */
- storeGet : function(key) {
- return this.getApplication().localStorage.getItem(key);
- },
- });
在需要使用LocalStorage的Controller中进行相关方法调用
- /**
- * 页面初始化
- */
- onDeptContainerInit : function() {
- var app = this.getApplication();
- var me = this;
- var items = me.storeGet("deptLocal");
- var storeName = "Depts";
- // 如果LocalStorage存在之前保存的JSON格式对象,则从LocalStorage中获取
- if (items != null) {
- store = Ext.getStore(storeName).load();
- store.setData(JSON.parse(items));
- // 否则,从服务器端获取
- } else {
- var data = {
- adapter : "OADept",
- procedure : "getDepts",
- parameters : []
- };
- app.getAdapterProcess(storeName, null, data, true, function(items) {
- //将从服务器端获取的数据转化成String,并存储在LocalStorage中
- me.storeSet("deptLocal", JSON.stringify(items));
- });
- }
- },
<script type="text/javascript"> </script><script type="text/javascript" src="http://pagead2.googlesyndication.com/pagead/show_ads.js"></script>