圈子首页 ajax EXT 论坛

tabpanel 中如何激活 第三个 form(附代码)

creat66 2008-04-16
我在tabpanel中放了3 个 form(fm1,fm2,fm3)在提交第三个form过程中无法得到fm3中的数据,用普通的windows.document.forms.length 得到也是2个form,这是什么原因,有人能帮我解决一下吗?附代码
如下:
var tp =new Ext.TabPanel({
activeTab: 0,
width:550,
height:450,
name:'tp',
defaults:{bodyStyle:'padding:10px'},
xtype:'tabpanel',
plain:true,
defaults:{ frame:true},
closable:true,
layoutOnTabChange:true,
items:[{
title: '查询1',
layout:'form',
cls:'x-plain',
items:[
fm1
]
},{
title: '查询2',
layout:'form',
cls:'x-plain',
items:[
fm2
]
},{
title: '查询',
layout:'form',
cls:'x-plain',
items:[
fm3
]
}]})



var win = new Ext.Window({
el:'hello-win',
layout:'fit',
width:550,
height:450,
closeAction:'hide',
plain: true,
modal:true,
collapsible: true,
//draggable: true,
closable: true,
items:
tp,
buttons: [{
text: '关闭',
handler: function(){
win.destroy();
}
}]
}

);
creat66 2008-04-16
只有当每个tab都点过,length值才会变成3,否则2
给我的感觉好像是初始forms.length是2,需要激活三个
rbg 2008-05-06
你可以研究下页签的机制:页签展现渲染时,只会初始化渲染你所指定的activeTab这个子页签,其他的页签一律不渲染,所以也就不存在form的dom内容,如果没有指定activeTab页签不会初始化任何子页签,那么所有的form都不会得到渲染;另外,当鼠标点击一个子页签时,ext先判断该子页签是否渲染过,如果没有渲染先渲染该子页签的内容,也就是你的form,如果已经渲染过就直接显示。
知道以上原理,就不难理解你的问题了。
如果想解决这个问题,有两种方法:1、提交页签的form时,判断一下,如果form没有渲染,就让含有该form的子页签显示
2、改造ext页签的代码,使其在页签渲染时不只是初始化渲染activeTab,让它渲染所有的页签
cylix 2008-05-06
楼上正解...
如果你要一出来就渲染出所有的form
tabpanel中有个deferredRender的属性 设置为false就好
rbg 2008-05-06
楼上说的对 deferredRender 这个属性