我在一个FormPanel里,加了3个选项卡,每个选项卡里有若干个fieldset来放控件。
但是,第一个选项卡里的,fieldset的控件,都能显示,而第2个和第3个选项卡里的fieldset里的控件,
不显示。
上图,看一下,
第一个选项卡:
你看,fieldset的控件可以显示吧。
在看第二个选项卡:
选项卡里没有控件吧。。
看第二个选项卡的代码:
{
title:'家庭成员资料',
layout:'form',
defaultType: 'textfield',
items: [
{
xtype:'fieldset',
title: '上年内家庭成员变动情况',
autoHeight: true,
defaultType: 'textfield',
items:[
{
fieldLabel: 'Home',
name: 'home',
value: '(888) 555-1212'
},{
fieldLabel: 'Business',
name: 'business'
}
]
},{
fieldLabel: 'Home',
name: 'home',
value: '(888) 555-1212'
},{
fieldLabel: 'Business',
name: 'business'
}]
}
你看'fieldset'是有控件的吧。。
可是,为什么,里边的控件显示不出来啊。
在网上搜了下,http://shenheng.blogbus.com/logs/12457290.html
说是,没有渲染,按照他的方式试了下,
还是不可以。。。
谁来帮帮我呀。。。
--------------2009-11-23日,因2楼朋友需要添加.(自己遇到问题的时候,有热心朋友帮助过,算是我的一点小回报,和付出吧.(*^__^*) 嘻嘻……)----------------------------------------
已解决.原因是,跟控件的渲染顺序有关.
-----------------------------
你这样click是在它的tab处理之前调用的,这个时候那个界面还没有生成,还没做渲染,正确的做法要在它用js生成了这个tab页面以后再调用。
所以你还是用listeners监听到整个tab页面完成后执行看看。
listeners:{
activate:function(tab){
handleIEhasLayout();
}
}
------------------提问者对于答案的评价:
这个东西太神奇了http://shenheng.blogbus.com/logs/12457290.html
像这里边说的。我结合你的,和这篇文章。真的很感谢你哟。。
--------------------------------------------------------------
网上的文章:
---doLayout--Ext的界面显示中的陷阱 - [IT笔记]
版权声明:转载时请以超链接形式标明文章原始出处和作者信息及本声明
http://shenheng.blogbus.com/logs/12457290.html
在近日的Ex 2.0t研究中,遇到一个非常奇怪的问题,在一个TabPanel中动态增加一个FormPanel,这个FormPanel的items是FieldSet,FieldSet里再包含各种Field。我是通过TabPanel的add方法添加FormPanel的,然后再用setActiveTab方法将FormPanel显示出来,这时就出现一个很奇怪的问题:FormPanel里面的Field一个也看不到,能过调试的方式,看到各个Field的rendered属性都是false,也就是说这些Field一个都没有被进行渲染(rendering)方面的处理,追查了很久,没有找到问题的根源。后来,无意中发现,当改变窗口大小时,FormPanel里的Field就可以显示出来了,真是非常的神奇。
今晚,再将代码里的重要部分抽取出来,做了下面一个测试例子(代码在正文之后)。在这段代码里,我直接创建一个FormPanel,里面还是先一个FieldSet,在FieldSet里添加Field,接着再创建一个TabPanel,将刚才创建的FormPanel作为TabPanel的items,注意:在我的测试例子里,FormPanel是直接通过TabPanel的构造函数加入的,而不是能过TabPanel的add方法添加的,因此,我认为这是一种静态添加,而不是动态增加。当用IE打开这个测试例子,Form里面的元素没有显示出来,必须改变一下窗口大小,Form里面的元素才能正常显示。在Ext的论坛搜索了一下,也有人遇到类似的问题(详见http://75.126.167.146/forum/showthread.php?t=21356),回答者的解决方法是“If you dynamically add a panel to container you always need to call container.doLayout() afterwards”,就是说你动态增加一个panel到某个容器后,你需要调用容器doLayout方法进行重新布局,你只需要将测试例子最后的javascript语句“tp.doLayout();”的注释去掉,你就可以看到Form里的元素,而不需要改变窗口大小。论坛说使用这种机制的原因是“Adding a panel doesn't automatically call doLayout to allow you to add multiple panels without having the overhead of a relayout every time”,就是说避免当用户向同一容器不断添加panel里,容器不断地重新布局的情况(如果容器是自动重新布局的话,就是每添加一个panel,容器就要重新布局一次),这是出于性能的考虑,是可以理解的,但我的问题是:在我的测试例子里,我用的是TabPanel构造函数来设置items,而且这是在TabPanel的render调用之前,这样子应该算是静态添加panel,而不是动态添加,因此,Form里的元素应该是主动显示出来的,而不需要我去调用doLayout。Ext的API Document中,Ext.Container的文档里解释了doLayout方法:“Force this container's layout to be recalculated. A call to this function is required after adding a new component to an already rendered container. If you are not dynamically adding and removing components after render, this function will generally not need to be called”。按这个文档的说法,就是说只有添加控件到已经渲染过的容器,才需要调用doLayout。所以,我认为这是Ext 2.0的一个Bug,容器在render时,没有将容器里的所有控件都渲染,先提交到Ext官方再说,看看怎么解决这个问题。
测试例子代码,请放在ext的examples目录下执行,或者自行修改相差的.js和.css设置,关键在于最后的tp.doLayout()语句,使用或注释就会产生不同的效果:
<html>
<head>
<title>My Case</title>
<link rel="stylesheet" type="text/css" href="../resources/css/ext-all.css"></link>
<script type="text/javascript" src="../adapter/ext/ext-base.js"></script>
<script type="text/javascript" src="../ext-all.js"></script>
</head>
<body>
<div id="tab">
</div>
</div>
</body>
</html>
<script language="javascript">
Ext.onReady(function(){
Ext.QuickTips.init();
var fs = new Ext.FormPanel({
frame: true,
title:'XML Form',
labelAlign: 'right',
labelWidth: 85,
width:340,
waitMsgTarget: true,
items: [
new Ext.form.FieldSet({
title: 'Contact Information',
autoHeight: true,
defaultType: 'textfield',
items: [{
fieldLabel: 'Field1',
name: 'Field1',
width:190
}]
})
]
});
var tp = new Ext.TabPanel({
activeTab:0,
items: [fs]
});
tp.render('tab');
//注释下一行或取消下一行的注释将有不同的效果
//tp.doLayout();
});
</script>
---------------------------------------------------------------------------------------------因此最终原因:
doLayout();
--------------------------------------
2楼的朋友,因为问题已经好长时间了,具体我加的那句话,我也忘了..但是跟控件的渲染有关...doLayout();可以帮到你哦...(*^__^*) 嘻嘻……
- 大小: 26.3 KB
- 大小: 9.4 KB
分享到:
相关推荐
### Extjs FieldSet 两行两列布局解析 在Extjs框架中,`FieldSet`是一种常见的组件,常用于组织一组相关的表单字段,并通过一个标题来标识这组字段的主题。本文将详细介绍如何使用Extjs实现一个两行两列布局的`...
Ext.form.FieldSet是Ext JS库中的一个组件,用于组织和分组表单字段。它提供了一种方便的方式来呈现和管理一组相关的输入控件,并且可以通过配置项进行自定义以适应不同的设计需求。以下是对FieldSet的一些关键配置...
以下是自己扩展的FieldSet: 代码如下: ME.Base.FieldSet = Ext.extend(Ext.form.FieldSet, { layout: ‘column’, fieldSetItems: [], autoScroll:false, defaults: { layout: ‘form’, labelAlign: ‘right’, ...
`Ext.form.FieldSet` 是 `ExtJS` 框架中的一个组件,它主要用于组织和分组表单中的字段。FieldSet 提供了一种在界面上以可折叠或展开的方式展示一组相关输入字段的方式,有助于增强用户体验和界面的可读性。以下是对...
首先,fieldset 元素不能单独使用,而必须包含在 form 元素中。其次,fieldset 元素可以包含多个表单控件,但每个控件都应该包含在一个 div 元素中,以便于布局和样式控制。最后,legend 元素是 fieldset 元素的必需...
1.5. 为什么自己按照例子写的代码,显示出来总找不到图片 1.6. 我们还需要什么? 1.7. 入门之前,都看helloworld。 1.7.1. 直接使用下载的发布包 1.7.2. 只把必要的东西放进项目中 2. 震撼吧!让你知道ext表格控件...
7. `hidden`:`Ext.form.Hidden`是隐藏字段,用于存储不显示在表单界面中的数据。 8. `htmleditor`:`Ext.form.HtmlEditor`是一个富文本编辑器,用户可以编辑HTML内容,包括字体、颜色、图片等。 9. `numberfield`...
用Ext自定义一个类似于Fieldset的组件,还有数据绑定昂,跟json数据的交互,和后台交互使用了URLLoader,很强大,之前在网上找了很多,没有找到,后来我师傅给我源码,这里跟大家分享一下,有用到的童鞋们可以参考...
1.4. 为什么自己按照例子写的代码,显示出来总找不到图片 1.5. 我们还需要什么? 1.6. 入门之前,都看helloworld。 1.6.1. 直接使用下载的发布包 1.6.2. 只把必要的东西放进项目中 2. 震撼吧!让你知道ext表格控件的...
根据给定的信息,本文将详细解释“Ext 添加功能form表单实例”的知识点,这主要针对Ext初学者。本文会从创建表单、字段定义、验证规则以及提交逻辑等方面进行深入探讨。 ### Ext 添加功能form表单实例 #### 表单...
EXT JS是一个强大的JavaScript库,提供了一系列组件化的UI控件,包括各种类型的表单元素,如文本框、下拉框、复选框、日期选择器等,以及数据绑定和验证功能,使得开发者可以构建出具有桌面应用般体验的Web应用。...
### Ext组件概述与详解 #### 一、Ext基础组件 **1.1 Box Component (Ext.BoxComponent)** - **xtype**: `box` - **功能描述**:Box Component 是一个非常基本的 Ext 组件,主要用于定义具有边框和其他布局属性的...
多选下拉框在EXT JS中通常通过`Ext.form.CheckboxGroup`或`Ext.form.RadioGroup`类来实现,但在EXT3.2中,实现多选下拉框功能通常会使用`Ext.form.FieldSet`或`Ext.form.ComboBox`的自定义扩展。这类组件提供了复选...
MyJsp(html的fieldset使用 MyJsp(html的fieldset使用MyJsp(html的fieldset使用MyJsp(html的fieldset使用
Ext 中的 xtype 和 vtype Ext 是一个功能强大的 JavaScript 框架,它提供了许多有用的组件和工具,使开发者可以快速构建复杂的 Web 应用程序。在 Ext 中,xtype 和 vtype 是两个非常重要的概念,它们分别用于定义...
这通常涉及到定义一个EXT的Panel或FieldSet,并在其配置项中设置FCKeditor的初始化代码。 3. **配置FCKeditor**:FCKeditor有很多可配置的选项,如语言设置、工具栏布局、字体样式等。这些配置可以通过JavaScript...
4. **Ext.form.FieldSet**:如果表单数据复杂,可以使用FieldSet来组织字段,FieldSet是一个可折叠的容器,可以包含多个字段。 5. **Ext.data.Store**:Store是用来存储数据的容器,它可以与表单联动。在动态加载...
**Ext.form.FieldSet** - **描述**: 表单字段组,用于将相关的表单元素分组。 - **用途**: 将逻辑相关的表单元素归类,如个人信息、地址信息等。 **Ext.form.Hidden** - **描述**: 表单隐藏域,用于存储不希望用户...
在Ext JS这个强大的JavaScript框架中,`Ext.Window`是一个常用组件,用于创建浮动、可弹出的窗口。在Web应用程序中,我们常常需要在这些窗口中展示各种内容,包括文字、表格、按钮,当然还有图片。本文将详细介绍...