ExtJS 等待两个/多个store加载完再执行操作的方法
2015-09-22 14:42
615 查看
ExtJS是一种主要用于创建前端用户界面,是一个基本与后台技术无关的前端ajax框架。
Extjs加载Store是异步加载的,这有很多好处。但是当我们要在两个或多个不同的store加载完再执行一些操作时,异步加载就成了一个问题。在StackOverflow等网站搜集并试用了几个处理方法,总结如下。
1、自己定义一个组件
使用的时候把两个不同的store,作为参数传过去。
2、使用setInterval
3、与方法二类似
Extjs加载Store是异步加载的,这有很多好处。但是当我们要在两个或多个不同的store加载完再执行一些操作时,异步加载就成了一个问题。在StackOverflow等网站搜集并试用了几个处理方法,总结如下。
1、自己定义一个组件
Ext.define(‘Ext.ux.StoreLoadCoordinator‘,{ mixins:{ observable:‘Ext.util.Observable‘ }, resetStoreLoadStates:function(){ this.storeLoadStates={}; Ext.each(this.stores,function(storeId){ this.storeLoadStates[storeId]=false; },this); }, isLoadingComplete:function(){ for(vari=0;i<this.stores.length;i++){ varkey=this.stores[i]; if(this.storeLoadStates[key]==false){ returnfalse; } } returntrue; }, onStoreLoad:function(store,records,successful,eOpts,storeName){ this.storeLoadStates[store.storeId]=true; if(this.isLoadingComplete()==true){ this.fireEvent(‘load‘); this.resetStoreLoadStates(); } }, constructor:function(config){ this.mixins.observable.constructor.call(this,config); this.resetStoreLoadStates(); Ext.each(this.stores,function(storeId){ varstore=Ext.StoreManager.lookup(storeId); store.on(‘load‘,Ext.bind(this.onStoreLoad,this,[storeId],true)); },this); this.addEvents( ‘load‘ ); }});
使用的时候把两个不同的store,作为参数传过去。
varstore1=Ext.create(‘Ext.data.Store‘,{ storeId:‘Store1‘, ....(restofstoreconfig) }}); varstore2=Ext.create(‘Ext.data.Store‘,{ storeId:‘Store2‘, ....(restofstoreconfig) }}); varcoordinatior=Ext.create(‘Ext.ux.StoreLoadCoordinator‘,{ stores:[‘Store1‘,‘Store2‘], listeners:{ load:function(){ //Dopost-loadwork } } });
2、使用setInterval
varbChartArr=[false,false,false,false]; //加载图表轴 Ext.getStore("ChartAxes").load( { params:{queryId:queryId}, callback:function(){ bChartArr[0]=true; } }); //加载图表序列 Ext.getStore("ChartSeries").load( { params:{queryId:queryId}, callback:function(){ bChartArr[1]=true; } }); //加载图表样式 Ext.getStore("ChartStyle").load( { params:{queryId:queryId}, callback:function(){ bChartArr[2]=true; } }); //按钮 Ext.getStore("Buttons").load( { params:{query_id:queryId}, scope:this, callback:function(){ bChartArr[3]=true; } }); varme=this; //等待所有的Storoe加载完成后执行 vartimer=setInterval(function(){ if(bChartArr[0]&&bChartArr[1]&&bChartArr[2]&&bChartArr[3]){ clearInterval(timer);//清除等待 //解析图表样式、轴、序列动态生成图表 me.createChartPanel(); } },100);
3、与方法二类似
varstore1=Ext.create(‘Ext.data.Store‘,{ model:myModel, storeId:‘store1‘,//<--addsthistoExt.data.StoreManager proxy:{ type:‘ajax‘, url:‘url...‘, reader:‘json‘ }, autoLoad:{ callback:initData } }); varstore2=Ext.create(‘Ext.data.Store‘,{ model:myModel, storeId:‘store2‘, proxy:{ type:‘ajax‘, url:‘url...‘, reader:‘json‘ }, autoLoad:{ callback:initData } }); //Initializestoredependencieswhenallstoresareloaded functioninitData(){ varloaded; Ext.data.StoreManager.each(function(store){ loaded&=!store.isLoading(); returnloaded; }); if(loaded){ //dostuffwiththedata } }
相关文章推荐
- JSP中文乱码常见3个例子及其解决方法
- js 限制只能输入数字和一个小数,且第一位不能为小数
- JavaScript 经典实例收集整理
- JavaScript作用域和执行环境
- 判断非法字符串的类方法,与jsp
- JS的数组操作函数
- JavaScript原生对象及扩展
- JavaScript参数传递和对象复制
- js 控制锚点定位
- js 程序出发事件
- 数组、字典转化为json字符串
- JavaScript四舍五入并保留两位小数
- 如何格式化被压缩的JS代码方便阅读
- threejs渲染器透明
- DOM注意事项(八):JavaScript操作环境和垃圾收集
- JS 跨域资源共享 -- Ajax CORS / img ping / jsonp
- javascript 次序li
- Javascript浅谈之表达式和语句的区别
- javascript删除提示弹出况确认
- 07-js正则验证文件后缀名