ext fieldset里边的控件 不显示

我在一个FormPanel里,加了3个选项卡,每个选项卡里有若干个fieldset来放控件。
但是,第一个选项卡里的,fieldset的控件,都能显示,而第2个和第3个选项卡里的fieldset里的控件,
不显示。
上图,看一下,
第一个选项卡:
[img]/upload/attachment/85747/e6248328-9db4-361f-9964-944d2ebca724.jpg[/img]
你看,fieldset的控件可以显示吧。

在看第二个选项卡:

[img]/upload/attachment/85749/6f1f925d-5cb8-3bfa-a8bd-b915275c978e.gif[/img]

选项卡里没有控件吧。。
看第二个选项卡的代码:
[code="java"]
{
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'
}]
}
[/code]

你看'fieldset'是有控件的吧。。
可是,为什么,里边的控件显示不出来啊。

在网上搜了下,http://shenheng.blogbus.com/logs/12457290.html
说是,没有渲染,按照他的方式试了下,
还是不可以。。。
谁来帮帮我呀。。。
[b]问题补充:[/b]
没明白。
可以告诉我,怎样得到选项卡更换事件,
然后调用此方法重新渲染吗(⊙_⊙)?
[b]问题补充:[/b]
Ps:
playfish 我用这个方法,试了,不可以。
<br><br> // 你给我的这个函数<br> function handleIEhasLayout(){<br><br> //trigger re-rendering<br><br> document.body.style.zoom = 1.1;<br><br> //restore it<br><br> document.body.style.zoom = &#39;&#39;;<br><br> } </p> <pre><code> Ext.onReady(function(){ //得到选项卡 var test =Ext.get(&#39;tabPanelTest&#39;); //点击选项卡时,调用 test.on(&#39;click&#39;,function(){ handleIEhasLayout(); }); }); </code></pre> <p>

但是,也是不可以。。。。。。。。
[b]问题补充:[/b]
我alert过了,
可以确定,他执行了,handleIEhasLayout方法。。

[b]问题补充:[/b]
而且,不仅alert,还alert两次呢。
+_+
[b]问题补充:[/b]
是不是,不是渲染的事啊。。
难道是哪少些了属性?
应该不需要加enable=true似的东西吧。。
好+_+啊

哦,不对,可能这样有问题,

[color=red]你这样click是在它的tab处理之前调用的,这个时候那个界面还没有生成,还没做渲染[/color],正确的做法要在它用js生成了这个tab页面以后再调用。

所以你还是用listeners监听到整个tab页面完成后执行看看。

listeners:{

activate:function(tab){

handleIEhasLayout();

}

}

如果是IE下的渲染问题的话,你可以尝试下这个解决方法:

[code="js"]
function handleIEhasLayout(){
//trigger re-rendering
document.body.style.zoom = 1.1;
//restore it
document.body.style.zoom = '';
}
[/code]

加一个这样的函数在你的js,比如放到head之间。然后在页面的最下面调用一下这个函数,或者说你有需要的时候随时可以调用。之所以放在页面最下面,是因为这个时候js都已经执行完了,这个方法是需要在最后执行的。
[code="js"]

handleIEhasLayout();

[/code]

或者你可以在每次切换了tab的时候都调用这个函数执行一次,它可以触发ie进行重新渲染。尝试下吧。

在你的tabPanel的配置里面,可以加一个这样的监听参数吧?

listeners:{
activate:function(tab){}
}

具体的监听事件写法我就不熟悉了。你可以把这个触发重新渲染放在这里。当激活标签的时候,就执行一下。

[code="js"]
listeners:{
activate:function(tab){
handleIEhasLayout();
}
} [/code]

呃,函数里面加一个alert看看,确定一下是不是执行了。。?

function handleIEhasLayout(){

alert('re-rendering');
//trigger re-rendering

document.body.style.zoom = 1.1;

//restore it

document.body.style.zoom = '';

}