前几天做了一个功能实现,在一个tabpanel上的多个tab标签存放同一个数据源里的的不同的数据,其中tab标签的title为自动生成的。其中存放数据里的容器为GridPanel,因为是同一个GridPanel,所以store是唯一一个,如里每个tab页都存放一个GridPanel的话,就需要同等量的store,这里会很麻烦。页面效果如下图:
![](http://hi.csdn.net/attachment/201104/7/0_1302172583ONc2.gif)
其中,每个tab页里存放的不同的数据,加载数据的方式也为异步加载,点击事件触发时,加载数据。
上面四个tab标签的title为数据里面的字段(四个不同阶段:JDMC),在加载数据源前,先有自动通过后台方法获得四个阶段的名称,方便tab点击事件触发事,根据不同的阶段(JDMC)为参数获得数据。
前台引用EXTJS的代码就省略,直接上引用JS代码:
-
varcom_jdmc;
-
varcom_jdmc1;
-
varcom_jdmc2;
-
varcom_jdmc3;
-
varcom_jdmc4;
-
Ext.onReady(function(){
-
-
renderPage();
-
-
functiongetJdmcInfo(response,option){
-
try
-
{
-
varobj=Ext.util.JSON.decode(response.responseText);
-
if(obj.data.length==4)
-
{
-
com_jdmc1=obj.data[0].JDMC;
-
com_jdmc2=obj.data[1].JDMC;
-
com_jdmc3=obj.data[2].JDMC;
-
com_jdmc4=obj.data[3].JDMC;
-
-
Ext.getCmp('tab0').setTitle(com_jdmc1);
-
Ext.getCmp('tab1').setTitle(com_jdmc2);
-
Ext.getCmp('tab2').setTitle(com_jdmc3);
-
Ext.getCmp('tab3').setTitle(com_jdmc4);
-
}
-
}
-
catch(err)
-
{
-
Ext.Msg.alert('错误信息',err.description);
-
}
-
}
-
-
functionrenderPage(){
-
Ext.Ajax.request(
-
{
-
url:'xxxx.aspx',
-
success:getJdmcInfo,
-
failure:requestFail,
-
params:{action:'getJDMC'}
-
});
-
}
-
functionrequestFail(response,option){
-
Ext.Msg.alert('获得阶段失败','请检查网络');
-
}
-
-
varexpander=newExt.ux.grid.RowExpander({
-
tpl:newExt.Template(
-
'<pstyle="height:auto"><b>汇报内容:</b><br>{HBNR}</p>'
-
)
-
});
-
-
varstore0=newExt.data.JsonStore({
-
url:'xxxx.aspx',
-
baseParams:{action:'getData'},
-
root:'data',
-
autoLoad:true,
-
fields:['HBDW','HBR','LRSJ','HBSJ','HBNR','JDMC'],
-
reader:newExt.data.JsonReader({},[
-
{name:'HBDW'},
-
{name:'HBR'},
-
{name:'LRSJ',type:'date'},
-
{name:'HBSJ',type:'date'},
-
{name:'JDMC'},
-
{name:'HBNR'}
-
])
-
});
-
-
vargrid_info=newExt.grid.GridPanel({
-
store:store0,
-
cm:newExt.grid.ColumnModel({
-
columns:[
-
expander,
-
{header:"汇报单位",width:150,dataIndex:'HBDW'},
-
{header:"汇报人",width:110,dataIndex:'HBR'},
-
{header:"汇报时间",width:100,dataIndex:'HBSJ'},
-
{header:"汇报阶段",width:140,dataIndex:'JDMC'}
-
]
-
}),
-
viewConfig:{
-
forceFit:true
-
},
-
columnLines:true,
-
plugins:expander,
-
width:500,
-
height:564,
-
collapsible:false,
-
animCollapse:false,
-
iconCls:'icon-grid'
-
});
-
-
varcenterTabs=newExt.TabPanel({
-
id:'centerTabs',
-
renderTo:document.body,
-
deferredRender:false,
-
enableTabScroll:true,
-
activeTab:0,
-
width:500,
-
height:564,
-
headerAsText:true,
-
margins:'0000',
-
items:[
-
{
-
id:'tab0',
-
items:[grid_info]
-
},
-
{
-
id:'tab1'
-
}
-
,
-
{
-
id:'tab2'
-
}
-
,
-
{
-
id:'tab3'
-
}
-
]
-
});
-
-
centerTabs.on('tabchange',function(e,args){
-
if(args.getItemId()=='tab0')
-
{
-
grid_info.getStore().removeAll();
-
grid_info.getStore().load({params:{JDMC:com_jdmc1}});
-
args.add(grid_info);
-
args.doLayout();
-
com_jdmc=com_jdmc1;
-
}
-
elseif(args.getItemId()=='tab1')
-
{
-
grid_info.getStore().removeAll();
-
grid_info.getStore().load({params:{JDMC:com_jdmc2}});
-
args.add(grid_info);
-
args.doLayout();
-
com_jdmc=com_jdmc2;
-
}
-
elseif(args.getItemId()=='tab2')
-
{
-
grid_info.getStore().removeAll();
-
grid_info.getStore().load({params:{JDMC:com_jdmc3}});
-
args.add(grid_info);
-
args.doLayout();
-
com_jdmc=com_jdmc3;
-
}
-
elseif(args.getItemId()=='tab3')
-
{
-
grid_info.getStore().removeAll();
-
grid_info.getStore().load({params:{JDMC:com_jdmc4}});
-
args.add(grid_info);
-
args.doLayout();
-
com_jdmc=com_jdmc4;
-
}
-
});
-
});
这里面要注意的是:
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数据源。
分享到:
相关推荐
Tab Panel组件允许开发者在一个界面上组织多个相关的页面或面板,每个页面通过一个标签表示,用户可以通过点击不同的标签来切换页面。这种布局不仅节省空间,还能提供更直观的导航体验。 #### 实例分析 在给定代码...
2. **选项卡(Tab)**: TabPanel是ExtJS中的另一个核心组件,它允许在一个容器中组织多个面板,每个面板对应一个选项卡。这样可以有效利用屏幕空间,提供多工作区。在后台系统中,不同的选项卡可以承载不同的功能...
TabPanel是包含多个Tab页的组件,每个Tab页可以是一个Panel。创建TabPanel的示例: ```javascript var tabPanel = new Ext.TabPanel({ items: [{ title: 'Tab 1', content: '这是Tab 1的内容' }, { title: 'Tab...
- **add()**:向 TabPanel 添加一个新的 Tab。可以通过传入的配置对象来定义 Tab 的属性,如标题、内容等。 - **closable**:表示该 Tab 是否可以被关闭。 - **autoLoad**:配置自动加载的内容,可以是 URL 地址,也...
- TabPanel是ExtJs中的一个多标签面板,用于展示多个页面内容。`defaults`可以设置默认属性,如`autoHeight`和`autoScroll`。`renderTo`指定了渲染的容器ID,`enableTabScroll`开启滚动条,`autoTabs`自动创建Tab,...
- 展示一组标签页,每个标签页都包含不同的内容。 ##### 7.2 代码 - **JS文件**: ```javascript new Ext.TabPanel({ renderTo: 'tabpanel1', activeTab: 0, items: [ { title: 'Tab 1', ...
**TABPANEL** 容器是另一个重要的容器类型,用于创建包含多个标签页的界面。每个标签页都可以有自己的内容和标题。 - **简单的 TABPANEL 容器**: ```html <div id="tab-panel" xtype="tabpanel"> <div xtype="...
`Ext.TabPanel` 是一个展示多个面板(Tab)的容器,每个面板可以视为一个独立的页面,这对于构建多视图应用非常实用。 `Function` 扩展篇则讨论了如何利用 ExtJs 提供的工具方法来增强原生 JavaScript 函数的功能,...
`Ext.TabPanel` 是一个选项卡面板组件,用于显示多个可切换的面板。下面是一个简单的 `Ext.TabPanel` 示例: ```javascript new Ext.TabPanel({ width: 400, height: 200, renderTo: Ext.getBody(), items: [ ...
- `tabpanel`: `Ext.tab.Panel` — 选项卡面板。 #### 四、总结 ExtJS作为一款优秀的JavaScript框架,不仅提供了强大的UI组件,还支持多种布局管理方式、数据绑定机制以及事件处理等功能。通过深入学习其组件体系...