Невозможно получить компонент с помощью ItemId

#aem

#аэм

Вопрос:

Привет, Ниже приведен мой код, используемый в качестве прослушивателя для кнопки.

 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 всегда показывает undefined. Url — это идентификатор элемента виджета, который скрыт. Ниже приведен следующий 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 > widgetCollections > tabpanel > widgetcollections > panel(basic)

Ответ №1:

Согласно документам виджета, itemId это альтернативный способ получить ссылку на компонент, когда ссылка на объект недоступна, и это не то же CQ.Ext.getCmp() самое, что для которого требуется уникальный идентификатор.

Также замечено, что при использовании itemId идентификатор не устанавливается в поле ввода, а вместо него используется идентификатор, сгенерированный CQ. С другой стороны, использование id свойства устанавливает заданный идентификатор в поле ввода.

Кроме того, using comp.findParentByType('panel'); возвращает массив панелей, начиная с ближайшей панели. Поскольку feedurl не существует в этой панели, он всегда будет возвращать undefined для panel.getComponent("Url");

Попробуйте изменить 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);
}
 

Комментарии:

1. Спасибо, я получил объект, теперь я пытаюсь установить свойство value этого объекта с помощью: feedurl.value=path; alert(«feed :: » feedurl.value); alert показывает мне значение, которое я хочу установить, но внутри узла оно не устанавливается по-прежнему пустым.

2. Попробуйте setValue() метод. Пожалуйста, найдите мой ответ отредактированным.

3. Пробовал, я вижу, что на вкладке network параметр отображается (name amp; value), но свойство value для этого виджета остается пустым.