无法使用ItemId获取组件

时间:2014-06-23 13:38:02

标签: cq5

嗨下面是我的代码用作按钮的监听器。

function(comp, evt , record, path) {
    var str=document.URL;
    var test=str.replace("http://localhost:4502","");
    var a=test.split("\.");
    var path=a[0]+"/jcr:content";
    var dialog = this.findParentByType('dialog'); 
    panel=comp.findParentByType('panel'); 
    alert("panel :: "+panel);
    var feedurl = panel.getComponent("Url");
    alert(feedurl);
}

Feedurl始终显示未定义。 Url是隐藏的窗口小部件的itemId。下面是dialog.xml

<basic
    jcr:primaryType="nt:unstructured"
    title="Basic"
    xtype="panel">
    <items jcr:primaryType="cq:WidgetCollection">
        <rootPath
            jcr:primaryType="cq:Widget"
            fieldLabel="Target Path"
            name="./youtubepolling/rootPath"
            root="/content/dam"
            xtype="pathfield"/>
        <btnpanel
            jcr:primaryType="cq:Widget"
            border="{Boolean}false"
            xtype="panel">
            <items jcr:primaryType="cq:WidgetCollection">
                <connectbutton
                    jcr:primaryType="cq:Widget"
                    localName="connectButton"
                    style="float:right;"
                    text="Connect to Youtube"
                    xtype="button">
                    <listeners
                        jcr:primaryType="nt:unstructured"
                        click="function(comp, evt , record, path) { //js code defined above }"/>
                </connectbutton>
            </items>
        </btnpanel>
        <feedUrl1
            jcr:primaryType="cq:Widget"
            ignoreData="true"
            itemId="Url"
            name="./youtubepolling/feedUrl"
            value=""
            xtype="hidden"/>
    </items>
</basic>

在这个层次结构之上就像:

dialog &gt; widgetCollections &gt; tabpanel &gt; widgetcollections &gt; panel(basic)

1 个答案:

答案 0 :(得分:0)

根据widget docsitemId是在没有对象引用可用时获取对组件的引用的替代方法,并且与需要唯一的CQ.Ext.getCmp()不同ID。

还观察到,当我们使用itemId时,id不被设置为输入字段,而是使用CQ生成的Id。另一方面,使用id属性将给定的id设置为输入字段。

此外,使用comp.findParentByType('panel');返回一个面板数组,从最近的面板开始。由于该面板中不存在feedurl,因此panel.getComponent("Url");

将始终返回undefined

尝试修改JS,如下所示,并使用id代替itemId feedUrl1

function(comp, evt , record, path) {
    var str=document.URL;
    var test=str.replace("http://localhost:4502","");
    var a=test.split("\.");
    var path=a[0]+"/jcr:content";
    var dialog = comp.findParentByType('dialog'); 
    var feedurl = dialog.findById("Url");
    console.log(feedurl);
    feedurl.setValue(path);
}