Ext tabpanel...
先来看示例1:
html页面:
<div id="my-tabs">
</div>
<div id="tab1" class="x-hide-display">
A simple tab
</div>
<div id="tab2" class="x-hide-display">
Another one
</div>
对应js脚本:
Ext.onReady(function() {
var tabs = new Ext.TabPanel({
renderTo : 'my-tabs',
activeTab : 0,
width : 300,
items : [{
contentEl : 'tab1',
title : 'Tab 1'
}, {
contentEl : 'tab2',
title : 'Tab 2'
}]
});
})
生成的界面:
下面来该一个属性:
将html页面的代码改为:
<div id="my-tabs">
</div>
<div id="tab1">
A simple tab
</div>
<div id="tab2">
Another one
</div>
JS代码不变,再来看一下效果:
发现问题了吧,试一下点击tab2,发现another one又回到tabpanel里面了。
分析一下原因其实道理还是很简单的:
tabpanel的一个很重要的属性是deferredRender,该属性用于设置tab页的加载时机。默认为true,也就是说tabpanel默认是当你点击了tab页的标签才加载此tab页,这也就是为什么another one会跑到tabpanel的外面,因为没有设置deferredRender,只有当你点击tab2时才加载,也是出现了当你点击tab2时页面又恢复了正常。那么现在你将tabpanel加上那个属性deferredRender:false,这回问题就被解决了。
那为什么开始的那个例子没出现问题,因为加上了class="x-hide-display"就是将Another one所在的那个div隐藏了。
可以再ext中找到这个css的定义:
.x-hide-display{display:none!important;}
这一下上面的示例没有什么要说的了。
示例2:
html页面
<div id="my-tabs">
<div class="x-tab" title="Tab 1">A simple tab</div>
<div class="x-tab" title="Tab 2">Another one</div>
</div>
js代码:
Ext.onReady(function() {
var tabs = new Ext.TabPanel({
applyTo : 'my-tabs',
activeTab : 0,
width : 300,
deferredRender : false,
autoTabs : true
});
})
试一下也没有什么问题:
这里就要提到tabpanel的另一个重要的属性:autoTabs这个属性用于说明,是否将tabpanel所在的div的内部的class为x-tab的div加载到tabpanel中。当然这里也使用了deferredRender:false,不然也不好用。
这里注意一下:示例1和示例2的markup(即html的标签的结构)是不同的,autoTabs要求markup必须是良构的,并且只能够将class="x-tab"的div加载。这就是以上两个例子的区别所在。
另外这里注意那个contentEl属性,有没有很奇怪,在示例1中那tab页根本就没有在tabpanel所在的div中,但是竟然也被加载到tabpanel里面了,这个就是contentEl的作用,它的作用相当于“抢”,就是将他所指向的dom抢过来,加载它所在的位置,如示例1中tab页在tabpanel的items中,所以它可以将tabpane外的内容放到tabpanel里面来。
以上就是我对与使用tabpanel时注意问题的一个小小总结,希望对其他学习extjs的人有所帮助,Thanks!
(以后会陆续增加其他ext widget的使用时注意问题的总结)
- 大小: 2.1 KB
- 大小: 2.5 KB
分享到:
相关推荐
本篇文章将深入探讨如何在EXT JS的`TabPanel`中实现动态页面加载,这在构建可扩展且高效的Web应用时非常关键。通过动态加载,我们可以避免一次性加载所有标签页内容,从而改善用户体验,减少初次加载时的网络负担。 ...
需要注意的是,这种方法会直接销毁该标签页及其关联的数据模型,因此在使用前应确保没有其他引用指向该对象。 #### 关闭其他标签页 除了关闭当前标签页之外,有时还需要实现关闭其他所有标签页的功能,这可以通过...
1. **生命周期管理**:确保在尝试激活选项卡之前,tabpanel及其所有子选项卡都已经创建并加载完成。否则,可能会导致无法激活或者显示异常。 2. **事件监听**:可以监听`tabchange`事件,当选项卡被切换时,该事件...
在IT行业中,`TabPanel`通常是指一种...总的来说,`TabPanel`加载页面是一个涵盖了前端开发、后端通信、用户体验和性能优化等多个方面的主题。深入理解和掌握这些知识点,能够帮助开发者构建出高效、易用的多页面应用。
而 Ext 是一个JavaScript库,提供了丰富的用户界面组件,包括TabPanel,它被广泛用于组织和展示多个相关的页面或内容区域。 首先,让我们了解什么是TabPanel。在Web UI设计中,TabPanel 是一种常见的布局元素,它将...
3. **实现方式**: 要实现`Ext.TabPanel`的拖放功能,开发者通常需要集成EXT JS的拖放插件,如`Ext.dd.DD`或`Ext.dd.DDProxy`。这些插件提供必要的事件监听和处理,以响应用户的拖放操作。同时,可能还需要自定义事件...
### Ext中的tabpanel关闭后再打开不显示的问题 在Ext框架中,`TabPanel`是一个非常重要的组件,用于实现页面中的多标签页功能。然而,在实际应用过程中可能会遇到一个常见问题:当某个标签页被关闭后,如果尝试重新...
竖向标签TabPanel-------------------------------------------------
在本文中,我们将深入探讨`TreePanel`和`TabPanel`这两个重要的Ext JS组件,并讨论如何将它们结合在一起,以创建功能丰富的用户界面。`TreePanel`用于展示层次结构的数据,而`TabPanel`则提供了多标签页的功能,两者...
1. **扩展TabPanel类**:创建一个新的类,继承自Ext.TabPanel,并在扩展类中添加或覆盖必要的方法和配置,如`layout`配置项可能需要设置为自定义的垂直布局。 2. **自定义布局**:创建一个新的布局管理器,可能命名...
TabPanel的使用,添加tab,加载页面,添加事件
这里,`new Ext.TabPanel()`创建了一个新的`TabPanel`实例,`renderTo`属性指定了渲染的位置,这里是页面的主体部分(`Ext.getBody()`)。`width`和`height`分别定义了组件的宽度和高度。 接着,我们向`TabPanel`...
动态加载panel和HTML到tabpanel是提高应用性能和用户体验的有效方式,因为它允许按需加载内容,减少初始页面加载时间。下面我们将详细探讨EXTJS 4.x中如何实现这个功能。 首先,我们需要了解EXTJS 4.x的核心概念。...
需要注意的是,Extjs提供了多种方式来设置tabpanel的样式,例如可以使用Extjs的主题机制来设置tabpanel的样式,也可以使用CSS样式表来设置tabpanel的样式。不同的方法都有其优缺,开发者可以根据实际需求选择合适的...
var tabPanel = Ext.create('Ext.tab.Panel', { width: 600, height: 300, items: [ { title: 'Value Table', layout: 'fit', items: Ext.create('MyApp.view.MyGrid') } ] }).render(Ext.getBody()); })...
在ExtJS中,TabPanel是常用的组件,用于展示多个面板...然而,需要注意的是,`beforeclose`事件只对单个Panel有效,而`beforeremove`则适用于整个TabPanel,因此在处理关闭逻辑时,应结合这两个事件来达到最佳效果。
1. **渲染和布局**:确保TreePanel和TabPanel都能正确地在页面上渲染,各个组件的大小和位置符合预期。 2. **交互性**:测试节点点击事件是否能正确触发,TabPanel是否能根据事件切换到相应的标签页。 3. **性能**:...
extjs动态添加tabpanel标签页支持pannel嵌入 逻辑代码在 MyWindow.js里面直接调用 方法 就可以
要创建一个 `tabPanel`,你需要先定义一个 `Ext.container.TabPanel` 实例。在JavaScript代码中,这通常会涉及创建一个新的对象,并配置相应的属性,如宽度、高度、边框等。 ```javascript var tabPanel = Ext....
创建一个基本的TabPanel需要指定` xtype: 'tabpanel' `,并可以通过`items`属性来添加初始的面板。例如: ```javascript Ext.application({ name: 'MyApp', launch: function () { Ext.create('Ext.container....