使用ExtJS获取CQ5中对话框加载时下拉窗口小部件的值

时间:2013-12-20 22:21:20

标签: extjs cq5 aem

我在一个选项卡中有一个带有下拉列表(name =“number”,xtype =“selection”)小部件的对话框。在加载对话框时,我需要在此下拉列表中获取值以显示/隐藏另一个选项卡。

两个标签都在同一个对话框中(xtype =“tabpanel”)

我尝试在第二个标签中添加一个ExtJS代码作为“监听器”(需要隐藏/显示),但它不起作用:

<listeners
                jcr:primaryType="nt:unstructured"
                render="function() {alert(this.findParentByType('tabpanel').getFieldValues('number')); }"/>

1 个答案:

答案 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);
}

所以这可能只是修改一点让你的例子工作:) 希望它有所帮助

/约翰