`
king_tt
  • 浏览: 2279661 次
  • 性别: Icon_minigender_1
  • 来自: 深圳
社区版块
存档分类
最新评论

TabPanel多标签tab页加载同一个GridPanel显示不同的数据

 
阅读更多

前几天做了一个功能实现,在一个tabpanel上的多个tab标签存放同一个数据源里的的不同的数据,其中tab标签的title为自动生成的。其中存放数据里的容器为GridPanel,因为是同一个GridPanel,所以store是唯一一个,如里每个tab页都存放一个GridPanel的话,就需要同等量的store,这里会很麻烦。页面效果如下图:

其中,每个tab页里存放的不同的数据,加载数据的方式也为异步加载,点击事件触发时,加载数据。

上面四个tab标签的title为数据里面的字段(四个不同阶段:JDMC),在加载数据源前,先有自动通过后台方法获得四个阶段的名称,方便tab点击事件触发事,根据不同的阶段(JDMC)为参数获得数据。

前台引用EXTJS的代码就省略,直接上引用JS代码:

[c-sharp]view plaincopy
  1. varcom_jdmc;
  2. varcom_jdmc1;
  3. varcom_jdmc2;
  4. varcom_jdmc3;
  5. varcom_jdmc4;
  6. Ext.onReady(function(){
  7. //首先运行此方法,获得过后获得所需的不同阶段的参数
  8. renderPage();
  9. //为tab设置title,同时初始化开始定义的JDMC的值,下面往后台传参时使用
  10. functiongetJdmcInfo(response,option){
  11. try
  12. {
  13. varobj=Ext.util.JSON.decode(response.responseText);
  14. if(obj.data.length==4)
  15. {
  16. com_jdmc1=obj.data[0].JDMC;
  17. com_jdmc2=obj.data[1].JDMC;
  18. com_jdmc3=obj.data[2].JDMC;
  19. com_jdmc4=obj.data[3].JDMC;
  20. Ext.getCmp('tab0').setTitle(com_jdmc1);
  21. Ext.getCmp('tab1').setTitle(com_jdmc2);
  22. Ext.getCmp('tab2').setTitle(com_jdmc3);
  23. Ext.getCmp('tab3').setTitle(com_jdmc4);
  24. }
  25. }
  26. catch(err)
  27. {
  28. Ext.Msg.alert('错误信息',err.description);
  29. }
  30. }
  31. //后台请求方法,获得参数JMDC数据
  32. functionrenderPage(){
  33. Ext.Ajax.request(
  34. {
  35. url:'xxxx.aspx',
  36. success:getJdmcInfo,
  37. failure:requestFail,
  38. params:{action:'getJDMC'}
  39. });
  40. }
  41. functionrequestFail(response,option){
  42. Ext.Msg.alert('获得阶段失败','请检查网络');
  43. }
  44. //GridPanel的内容折叠项
  45. varexpander=newExt.ux.grid.RowExpander({
  46. tpl:newExt.Template(
  47. '<pstyle="height:auto"><b>汇报内容:</b><br>{HBNR}</p>'
  48. )
  49. });
  50. //GridPanel的数据源
  51. varstore0=newExt.data.JsonStore({
  52. url:'xxxx.aspx',
  53. baseParams:{action:'getData'},
  54. root:'data',
  55. autoLoad:true,
  56. fields:['HBDW','HBR','LRSJ','HBSJ','HBNR','JDMC'],
  57. reader:newExt.data.JsonReader({},[
  58. {name:'HBDW'},
  59. {name:'HBR'},
  60. {name:'LRSJ',type:'date'},
  61. {name:'HBSJ',type:'date'},
  62. {name:'JDMC'},
  63. {name:'HBNR'}
  64. ])
  65. });
  66. //数据容器GirdPanel
  67. vargrid_info=newExt.grid.GridPanel({
  68. store:store0,
  69. cm:newExt.grid.ColumnModel({
  70. columns:[
  71. expander,
  72. {header:"汇报单位",width:150,dataIndex:'HBDW'},
  73. {header:"汇报人",width:110,dataIndex:'HBR'},
  74. {header:"汇报时间",width:100,dataIndex:'HBSJ'},
  75. {header:"汇报阶段",width:140,dataIndex:'JDMC'}
  76. ]
  77. }),
  78. viewConfig:{
  79. forceFit:true
  80. },
  81. columnLines:true,
  82. plugins:expander,
  83. width:500,
  84. height:564,
  85. collapsible:false,//列表能否收缩
  86. animCollapse:false,
  87. iconCls:'icon-grid'
  88. });
  89. //Tab页[默认加载第一个tab,同时初始化第一个tab的数据(即初始化gridpanel),其它的tab只有初始ID值]
  90. varcenterTabs=newExt.TabPanel({
  91. id:'centerTabs',
  92. renderTo:document.body,
  93. deferredRender:false,
  94. enableTabScroll:true,
  95. activeTab:0,
  96. width:500,
  97. height:564,
  98. headerAsText:true,
  99. margins:'0000',
  100. items:[
  101. {
  102. id:'tab0',
  103. items:[grid_info]
  104. },
  105. {
  106. id:'tab1'
  107. }
  108. ,
  109. {
  110. id:'tab2'
  111. }
  112. ,
  113. {
  114. id:'tab3'
  115. }
  116. ]
  117. });
  118. //为不同的TAB点击事件加载数据源
  119. centerTabs.on('tabchange',function(e,args){
  120. if(args.getItemId()=='tab0')
  121. {
  122. grid_info.getStore().removeAll();
  123. grid_info.getStore().load({params:{JDMC:com_jdmc1}});
  124. args.add(grid_info);
  125. args.doLayout();
  126. com_jdmc=com_jdmc1;
  127. }
  128. elseif(args.getItemId()=='tab1')
  129. {
  130. grid_info.getStore().removeAll();
  131. grid_info.getStore().load({params:{JDMC:com_jdmc2}});
  132. args.add(grid_info);
  133. args.doLayout();
  134. com_jdmc=com_jdmc2;
  135. }
  136. elseif(args.getItemId()=='tab2')
  137. {
  138. grid_info.getStore().removeAll();
  139. grid_info.getStore().load({params:{JDMC:com_jdmc3}});
  140. args.add(grid_info);
  141. args.doLayout();
  142. com_jdmc=com_jdmc3;
  143. }
  144. elseif(args.getItemId()=='tab3')
  145. {
  146. grid_info.getStore().removeAll();
  147. grid_info.getStore().load({params:{JDMC:com_jdmc4}});
  148. args.add(grid_info);
  149. args.doLayout();
  150. com_jdmc=com_jdmc4;
  151. }
  152. });
  153. });

这里面要注意的是:

1.第一个默认的tab加载的是GRIDPANEL的初始的STORE,没有参数,所以在后台需要做一下处理,默认没有参加时,获得第一个阶段的数据。

2.TAB的点击事件,

首先要清空之前的加载的GRIDPANEL的数据:grid_info.getStore().removeAll();

然后再通过不同的参数重新为GRIDPANEL加载数据:grid_info.getStore().load({params:{JDMC: com_jdmc1}});

然后再把获得新的数据的GRIDPANEL加载到TAB上:args.add(grid_info);args.doLayout();

尤其注意不要忘了:args.doLayout();

刚开始处理的时候,一直处理,tab的点击事件只有第一次可以加载上,第二的话就会空的情况,原来是没有执行tab的doLayout()方法。

后台的方法就不再赘述,就是通过方法获得JSON数据源。

分享到:
评论

相关推荐

    JavaScript.-Extjs基础学习笔记

    Tab Panel组件允许开发者在一个界面上组织多个相关的页面或面板,每个页面通过一个标签表示,用户可以通过点击不同的标签来切换页面。这种布局不仅节省空间,还能提供更直观的导航体验。 #### 实例分析 在给定代码...

    Extjs 通用后台模板| 经典 Tree+Tab+Grid

    2. **选项卡(Tab)**: TabPanel是ExtJS中的另一个核心组件,它允许在一个容器中组织多个面板,每个面板对应一个选项卡。这样可以有效利用屏幕空间,提供多工作区。在后台系统中,不同的选项卡可以承载不同的功能...

    Ext开发总结

    TabPanel是包含多个Tab页的组件,每个Tab页可以是一个Panel。创建TabPanel的示例: ```javascript var tabPanel = new Ext.TabPanel({ items: [{ title: 'Tab 1', content: '这是Tab 1的内容' }, { title: 'Tab...

    extJs4.2学习笔记

    - **add()**:向 TabPanel 添加一个新的 Tab。可以通过传入的配置对象来定义 Tab 的属性,如标题、内容等。 - **closable**:表示该 Tab 是否可以被关闭。 - **autoLoad**:配置自动加载的内容,可以是 URL 地址,也...

    ExtJs使用过程中积攒的一些东西

    - TabPanel是ExtJs中的一个多标签面板,用于展示多个页面内容。`defaults`可以设置默认属性,如`autoHeight`和`autoScroll`。`renderTo`指定了渲染的容器ID,`enableTabScroll`开启滚动条,`autoTabs`自动创建Tab,...

    AnyFo_-_ExtJS_移魂大法

    - 展示一组标签页,每个标签页都包含不同的内容。 ##### 7.2 代码 - **JS文件**: ```javascript new Ext.TabPanel({ renderTo: 'tabpanel1', activeTab: 0, items: [ { title: 'Tab 1', ...

    RDF 使用帮助

    **TABPANEL** 容器是另一个重要的容器类型,用于创建包含多个标签页的界面。每个标签页都可以有自己的内容和标题。 - **简单的 TABPANEL 容器**: ```html &lt;div id="tab-panel" xtype="tabpanel"&gt; &lt;div xtype="...

    DotNet+Ext入门

    `Ext.TabPanel` 是一个展示多个面板(Tab)的容器,每个面板可以视为一个独立的页面,这对于构建多视图应用非常实用。 `Function` 扩展篇则讨论了如何利用 ExtJs 提供的工具方法来增强原生 JavaScript 函数的功能,...

    老师整理的extjs学习笔记

    `Ext.TabPanel` 是一个选项卡面板组件,用于显示多个可切换的面板。下面是一个简单的 `Ext.TabPanel` 示例: ```javascript new Ext.TabPanel({ width: 400, height: 200, renderTo: Ext.getBody(), items: [ ...

    extjs培训2011-12-17

    - `tabpanel`: `Ext.tab.Panel` — 选项卡面板。 #### 四、总结 ExtJS作为一款优秀的JavaScript框架,不仅提供了强大的UI组件,还支持多种布局管理方式、数据绑定机制以及事件处理等功能。通过深入学习其组件体系...

Global site tag (gtag.js) - Google Analytics