index.html
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>再探TabPanel和Tree控件搭配测试</title>
<link rel="stylesheet" type="text/css" media="all" href="js/ext2/resources/css/ext-all.css" />
</head>
<body>
<script type="text/javascript" src="js/ext2/adapter/ext/ext-base.js"></script>
<script type="text/javascript" src="js/ext2/ext-all.js"></script>
<script type="text/javascript" src="js/ext2/ext-grails.js"></script>
<script type="text/javascript" src="js/ext2/build/locale/ext-lang-zh_CN.js"></script>
<script type="text/javascript">Ext.BLANK_IMAGE_URL = '../ext/resources/images/default/s.gif';</script>
<script type="text/javascript">
//左边功能树
var menuTree = new Ext.tree.TreePanel({
region:'west',
title:'功能菜单',
width:180,
minSize:150,
maxSize:200,
split:true,
autoScroll:true,
autoHeight:false,
collapsible:true,
rootVisable:false, //不显示根节点
root:new Ext.tree.TreeNode({
id:'root',
text:'功能菜单',
draggable:false,
expanded:true
})
});
//添加第一个节点(autoLoad)
menuTree.root.appendChild(new Ext.tree.TreeNode({
id:'autoLoadPanel',
text:'通过autoLoad打开',
listeners:{
'click':function(node, event) {
event.stopEvent();
var n = contentPanel.getComponent(node.id);
if (!n) { //判断是否已经打开该面板
n = contentPanel.add({
'id':node.id,
'title':node.text,
closable:true,
//通过autoLoad属性载入目标页,如果要用到脚本,必须加上scripts属性
autoLoad:{url:'list.gsp', scripts:true}
}).show();
}
alert(n)
contentPanel.setActiveTab(n);
}
}
}));
//添加第二个节点(function)
menuTree.root.appendChild(new Ext.tree.TreeNode({
id:'functionPanel',
text:'通过函数打开',
listeners:{
'click':function(node, event) {
event.stopEvent();
var n = contentPanel.getComponent(node.id);
if (!n) {
var p = new fnPanel();
p.id = node.id;
p.title = node.text;
n = contentPanel.add(p);
n.show().doLayout(); //关键地方,重新刷新布局
}
contentPanel.setActiveTab(n);
}
}
}));
//通过扩展来构建要创建的面板
fnPanel = Ext.extend(Ext.Panel, {
closable:true,
autoScroll:true,
//创建面板内容
createFormPanel:function() {
return new Ext.form.FormPanel({
buttonAlign:'center',
labelAlign:'right',
labelWidth:36,
frame:false,
border:false,
//指定为绝对定位,可以让控件布局随意确定位置
style:'position:absolute;top:30%;left:30%;width:422px;',
items:[{
xtype:'textfield',
fieldLabel:'姓名',
width:350
},{
xtype:'textfield',
fieldLabel:'性别',
width:350
}],
buttons:[{text:'确定'}, {text:'取消'}]
});
},
//重装控件初始化函数,在该函数中完成面板中内容的初始化
initComponent:function() {
fnPanel.superclass.initComponent.call(this);
this.fp = this.createFormPanel();
this.add(this.fp);
}
});
//右边具体功能面板区
var contentPanel = new Ext.TabPanel({
region:'center',
enableTabScroll:true,
activeTab:0,
items:[{
id:'homePage',
title:'首页',
autoScroll:true,
html:'<div style="position:absolute;color:#ff0000;top:40%;left:40%;">Tree控件和TabPanel控件结合功能演示</div>'
}]
});
Ext.onReady(function(){
new Ext.Viewport({
layout:'border', //使用border布局
defaults:{activeItem:0},
items:[menuTree, contentPanel]
});
});
</script>
</body>
</html>
list.gsp
<div id="message">
</div>
<script type="text/javascript">
var ds = new Ext.ux.GrailsStore({
url: 'psclzd/listData',
reader: new Ext.data.XmlReader({
id: 'id',
record: 'psclzd',
totalRecords: 'count'
}, new Ext.data.Record.create([
{name: 'id'},
{name: 'clbh'},
{name: 'clmc'},
{name: 'note'}
])
)
});
var body = new Ext.grid.GridPanel({
renderTo:'psclzd_grid',
store: ds,
stripeRows: true,
loadMask: true,
border: false,
// autoShow:true,
autoHeight:true,
// viewConfig:{forceFit:true},
cm: new Ext.grid.ColumnModel([
{header: 'Id', dataIndex: 'id', sortable: true},
{header: 'Wlbh', dataIndex: 'clbh', sortable: true},
{header: 'Wlmc', dataIndex: 'clmc', sortable: true},
{header: 'Note', dataIndex: 'note', sortable: true}
]),
bbar: new Ext.ux.GrailsPagingToolbar({
store: ds,
displayInfo: true
})
});
body.on('rowdblclick', function(body, rowIndex, e) {
Ext.get("message").update("successful")
});
// body.doLayout();
ds.load();
</script>
<div id="psclzd_grid"></div>
这个gridPanel在 tabPanel 中显示后,表头和分页不固定,如果让表头和分页标签固定下来
相关推荐
总结,EXT JS的`TabPanel`支持动态页面加载,通过设置`lazy`属性和监听`tabchange`事件,我们可以实现在`Tab`被激活时按需加载内容,有效提高了应用性能。结合`ComponentLoader`或Ajax请求,可以灵活地加载HTML内容...
8. **性能优化**:加载大量内容时,需要考虑如何优化渲染速度,比如延迟加载、分页加载、缓存策略等。 9. **错误处理**:处理加载失败的情况,提供友好的错误提示,也是`TabPanel`开发中不容忽视的一环。 10. **...
通过以上步骤,我们能够实现EXTJS 4.x中tabpanel的动态加载功能。这不仅可以提高应用性能,还能使用户界面更加灵活,适应不同的场景需求。记得在实际项目中根据具体需求调整和优化代码,以获得最佳效果。
上述代码中的`this.tabPanel.getActiveItem()`用于获取当前活动的标签页,之后通过`item.loader.load()`来触发数据的重新加载。如果标签页本身并没有定义`loader`对象,则可以通过动态创建的方式为其添加一个`...
在处理大量数据时,考虑使用远程分页、延迟加载(Lazy Loading)和服务器端排序,以提高性能。 7. **响应式设计**: 使用 Ext.NET 的响应式布局(Responsive Configurations)和设备配置(Device Profiles),...
通过以上两种方法——调整`autoDestroy`和`closeAction`属性——我们可以有效地解决Ext中`TabPanel`关闭后再打开不显示的问题。这些技巧不仅能够提升用户体验,还能够在复杂的业务场景下提供更加灵活的界面管理方案...
在ExtJs中,GridPanel是用于展示数据的常用组件,它可以提供丰富的功能,如排序、分页、筛选等。在实际应用中,我们经常需要监听用户的交互行为,比如双击行进行进一步的操作。本篇文章将深入讲解如何在ExtJs ...
4. **动态添加标签页**:在`itemclick`事件处理函数中,利用`TabPanel`的`add`方法添加新标签页,或者通过`setActiveTab`方法切换到已有标签页。 5. **更新标签页内容**:如果需要动态加载内容,可以在此时创建或...
通过以上步骤,我们不仅学习了如何在ExtJS 4.2中根据不同数值设置TabPanel中GridPanel行的背景颜色,而且还了解了如何利用CSS和JavaScript结合来实现灵活多变的界面效果。这种方法不仅适用于数值类型的数据,还可以...
此外,通过`enableTabScrollerMenu`属性,我们可以开启自动显示的滚动菜单,以便在标签过多时进行导航。 至于`images`文件夹,通常包含用于美化TabPanel的图标或图片资源,如关闭按钮等。 总的来说,ExtJS的...
5. **数据驱动的视图更新**:根据用户在TreePanel中选择的节点,加载相应数据并渲染到TabPanel对应的Tab内。这可能涉及到DOM操作和模板引擎的使用,以确保内容的正确显示。 6. **网页展示**:在TabPanel中显示的...
首先,TabPanel是一种常见的UI组件,它允许用户在一个固定的区域中通过不同的选项卡浏览多个页面或视图。在网页设计中,TabPanel常用于减少页面的拥挤感,提高信息的组织性和可读性。jQuery库因其简洁的API和强大的...
4. **Ajax**:如果TabPanel的内容需要动态加载,可以使用Ajax异步请求数据,只在切换时加载对应面板的内容,提高用户体验。 5. **React/Vue/Angular**:在现代前端框架中,可以利用组件化思想创建TabPanel组件,如...
在本例中,我们仅设置了一个item,其标题为'主页',并且通过'autoLoad'属性自动加载了'content.jsp'页面内容。 最后,我们来看如何将Tree组件与TabPanel关联起来。这一步需要使用到Extjs的事件系统。我们为Tree组件...
在网页设计中,TabPanel 提供了一种整洁、高效的方式,让用户通过点击不同的标签来切换显示不同的信息板块,提高用户体验。这种布局模式在数据展示、设置页面和多模块内容呈现中尤其常见。 【描述】提到的是使用 ...
其中,tabpanel是Extjs中一个常用的控件,用于显示多个面板。设置tabpanel当前活动页签的样式是Extjs开发中的一项常见需求。 在Extjs4.2中,tabpanel控件的样式是由CSS样式表控制的。在tabpanel中,每个面板对应一...
1. **生命周期管理**:确保在尝试激活选项卡之前,tabpanel及其所有子选项卡都已经创建并加载完成。否则,可能会导致无法激活或者显示异常。 2. **事件监听**:可以监听`tabchange`事件,当选项卡被切换时,该事件...
综上所述,`ExtJS tabPanel` 实例是一个用于创建多标签界面的组件,通过它可以方便地管理和展示多个视图。通过与其他组件(如 `userManager.js`, `roleManager.js`, `rightManager.js`)结合,可以构建出功能丰富的...
通过以上步骤,我们可以实现一个具有垂直页签的ExtJS TabPanel,这不仅可以提高应用的可读性,还能为用户提供更直观的操作体验。对于那些需要展示大量页签且空间有限的应用来说,垂直页签是一个很好的解决方案。
extjs动态添加tabpanel标签页支持pannel嵌入 逻辑代码在 MyWindow.js里面直接调用 方法 就可以