`
catlovefox
  • 浏览: 26128 次
  • 性别: Icon_minigender_2
  • 来自: 济南
社区版块
存档分类
最新评论

ext fieldset里边的控件 不显示 Who help me?

    博客分类:
  • EXT
阅读更多
我在一个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
分享到:
评论
3 楼 catlovefox 2009-11-23  
liaoyizhi 写道
怎么解决的呢?能否贴出解决方法?

不知道,你解决了吗.我已贴上解决办法~
2 楼 liaoyizhi 2009-11-19  
怎么解决的呢?能否贴出解决方法?
1 楼 catlovefox 2009-03-20  
问题已解决,谢谢大家捧场。。哈哈

相关推荐

    ExtJS的FieldSet的column列布局

    以下是自己扩展的FieldSet: 代码如下: ME.Base.FieldSet = Ext.extend(Ext.form.FieldSet, { layout: ‘column’, fieldSetItems: [], autoScroll:false, defaults: { layout: ‘form’, labelAlign: ‘right’, ...

    EXT2.0中文教程

    1.5. 为什么自己按照例子写的代码,显示出来总找不到图片 1.6. 我们还需要什么? 1.7. 入门之前,都看helloworld。 1.7.1. 直接使用下载的发布包 1.7.2. 只把必要的东西放进项目中 2. 震撼吧!让你知道ext表格控件...

    Extjs3 自定义类似于Fieldset的组件

    用Ext自定义一个类似于Fieldset的组件,还有数据绑定昂,跟json数据的交互,和后台交互使用了URLLoader,很强大,之前在网上找了很多,没有找到,后来我师傅给我源码,这里跟大家分享一下,有用到的童鞋们可以参考...

    Ext 开发指南 学习资料

    1.4. 为什么自己按照例子写的代码,显示出来总找不到图片 1.5. 我们还需要什么? 1.6. 入门之前,都看helloworld。 1.6.1. 直接使用下载的发布包 1.6.2. 只把必要的东西放进项目中 2. 震撼吧!让你知道ext表格控件的...

    EXT教程EXT用大量的实例演示Ext实例

    1.5. 为什么自己按照例子写的代码,显示出来总找不到图片 1.6. 我们还需要什么? 1.7. 入门之前,都看helloworld。 1.7.1. 直接使用下载的发布包 1.7.2. 只把必要的东西放进项目中 2. 震撼吧!让你知道ext表格...

    MyJsp(html的fieldset使用

    MyJsp(html的fieldset使用 MyJsp(html的fieldset使用MyJsp(html的fieldset使用MyJsp(html的fieldset使用

    Extjs fieldset两行两列布局

    Extjs fieldset两行两列布局

    Ext.form.FieldSet的用法.docx

    ...

    Ext.form.FieldSet的用法.pdf

    ...

    主从表样例1 使用fieldset

    &lt;fieldset id="annex1" style="width:800px"&gt; &lt;legend&gt;SubTable 1 SubTable List Field1 Field2 Field3 ...

    Ext Js权威指南(.zip.001

    Ex4.0共2个压缩包特性,《ext js权威指南》 前 言 第1章 ext js 4开发入门 / 1 1.1 学习ext js必需的基础知识 / 1 1.2 json概述 / 3 1.2.1 认识json / 3 1.2.2 json的结构 / 3 1.2.3 json的例子 / 4 1.2.4 ...

    cmxform-fieldset图片

    cmxform-fieldset

    jquery fieldset和legend标签代码.zip

    jquery fieldset和legend标签代码是一款基于jQuery实现的简单的样式代码。

    HTML中fieldset

    HTML中fieldset如何把界面上需要在一块的内容放到一个容器,即分组

    可收放的HTML fieldset

    可收放的HTML fieldset。 模仿MSDN的可收放Fieldset 。

    Silverlight 2 正式版第三方控件

    好不容易等来了Silverlight 2 正式版,但是还是没有提供足够易用的控件,比如没有treeview控件,还好有第三方的。 Controls Included: ItemViewer FlowPanel RichTextBox NumericUpDown File/Data Uploader ...

    Flex3自定义组件类似于Fieldset

    Flex3自定义组件类似于Fieldset

    fieldset标签定义说明.docx

    fieldset标签定义说明.docx

    HTML中fieldset标签概述及使用方法

    之前HTML没有好好学,导致以前看到控件组样式感觉很新奇,fieldset&gt; 标签将表单内容的一部分打包,生成一组相关表单的字段,接下来对HTML中fieldset标签的使用进行详细解读,感兴趣的朋友可以了解下,或许对你有所帮助

    JavaScript设置FieldSet展开与收缩

    JavaScript方法代码: 代码如下:// 设置FieldSet高度方法,支持IE浏览器、Firefox // 参数1:pTableID,FieldSet内部div或table的id // 参数2:pFieldSetID,FieldSet的ID // 参数3:pImageID,图片的ID,展开或收缩...

Global site tag (gtag.js) - Google Analytics