繁体   English   中英

CQ5 AEM:如何使用javascript在对话框中按名称获取组件

[英]CQ5 AEM: how to get a component by name within a dialog using javascript

我知道这可能是一个简单的问题,但总体来说我是CQ5和AEM的新手。

我有一个cq:Widget节点,它是一个简单的文本字段。

 <rowtitlevalue
     jcr:primaryType="cq:Widget"
     fieldLabel="Row Title Value"
     name="./rowtitlevalue"
     xtype="textfield"
     disabled="true"/>

现在,在我的JavaScript中,我目前正在通过

var textfield = panel.findByType('textfield')[1];

可以正常工作(在此之前有另一个文本字段,因此数组中为1。

我的问题:我如何使用我的JavaScript中的NAME属性来查找此字段。

任何帮助,将不胜感激。

另外,我正在使用该对象运行以下命令:

if (show != undefined) {
    textfield.enable();
    textfield.show();
}
else if (show == undefined) {
    textfield.disable();
    textfield.hide();
}

JavaScript位于基于组件的ClientLib中。

这是我在复选框下定义的Listener中的SHOW值的侦听器(工作正常)。

<listeners
jcr:primaryType="nt:unstructured"
loadcontent="function(field,rec,path){Ejst.toggleRowTitle(field);}"
selectionchanged="function(field,value){Ejst.toggleRowTitle(field);}"/>

如果您对此有任何疑问,请告诉我。

提前欣赏

CQ.Dialog API定义了getField( String name)方法,该方法返回具有给定名称的字段。 如果存在多个同名字段,它将返回这些字段的数组。

因此,找到xtype dialog父级而不是panel ,如下所示。

Ejst.toggleRowTitle = function(checkbox) {
    var dlg = checkbox.findParentByType('dialog');
    var rowTitleField = dlg.getField('./rowtitlevalue');
    // perform required operation on rowTitleField
}

几天前我做了类似的事情,我的解决方案是在组件的相同级别上以相同的组件名称创建js文件,并提供所需的信息。 像这样:该文件将被称为rowtitlevalue.js ,其内容将是:

 "use strict";

    use(function() {

        var data = {};
        data.rowtitlevalueData = properties.get("rowtitlevalue");
        //more properties if needed...

        return  {
           data: data 
        }
    });

然后我需要在javascript中使用它,我需要以下标签:

<sly data-sly-use.data="rowtitlevalue.js">

    <script type="text/javascript">
        var myVariable = ${data.rowtitlevalueData};
   </script>

</sly>

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM