我在一个选项卡中有一个带有下拉列表(name =“number”,xtype =“selection”)小部件的对话框。在加载对话框时,我需要在此下拉列表中获取值以显示/隐藏另一个选项卡。
两个标签都在同一个对话框中(xtype =“tabpanel”)
我尝试在第二个标签中添加一个ExtJS代码作为“监听器”(需要隐藏/显示),但它不起作用:
<listeners
jcr:primaryType="nt:unstructured"
render="function() {alert(this.findParentByType('tabpanel').getFieldValues('number')); }"/>
答案 0 :(得分:3)
如果您查看OOB列表组件,它具有您所需的功能。 它为下拉选项实现了两个侦听器,其中包含要显示哪个选项卡的不同选项:
听众
loadcontent - &gt;
function(){
this.findParentByType('tabpanel').manageTabs(this.getValue(),true);
}
selectionchanged - &gt;
function(box,value){
box.findParentByType('tabpanel').manageTabs(value);
}
每当选择更改时,它将使用所选值管理选项卡,也会在内容时执行此操作 已加载,因此您无需一直更改值以使更改生效。
您还将看到实际的标签,并且他们正在实现一个用于渲染的监听器:
渲染 - &gt;
function() {
//The different panels will have to have the index corresponsing to their order in the node structure
this.findParentByType('tabpanel').hideTabStripItem( 'the index for the tab' );
}
最后为了实现这一点,主要的tabpanel需要将“manageTabs”函数定义为属性:
function(tab,noSwitch){
//Here you will have to specify the different node names for the panels
var tabs=['tab1','tab2','tab3',....,'tab n'];
var index=tabs.indexOf(tab);
if(index==-1) return;
for(var i=1;i<tabs.length;i++){
if(index==i){
this.unhideTabStripItem(i);
}else{
this.hideTabStripItem(i);
}
}
this.doLayout();if(!noSwitch)this.activate(index);
}
所以这可能只是修改一点让你的例子工作:) 希望它有所帮助
/约翰