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

时间:2014-03-20 23:08:11

标签: javascript extjs cq5 aem

我知道这可能是一个简单的问题,但我对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位于基于组件的ClientLibs中。

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

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

如果您发现此问题,请与我们联系。

提前感谢

2 个答案:

答案 0 :(得分:10)

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
}

答案 1 :(得分:1)

几天前我做了类似的事情,我的解决方案是在组件的同一级别创建一个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>