在cq对话框中,禁用复选框时禁用文本字段

时间:2014-07-07 14:58:44

标签: checkbox dialog widget textfield aem

一个cq对话框问题,我的对话框中有两个小部件,文本字段和复选框。 我需要的是,只有勾选复选框(true),然后文本字段才可供作者编辑,当未选中复选框时,必须禁用文本字段...

我已经搜索了一段时间,无法找到答案,请指教,这是我的两个小工具..

<checkbox
    jcr:primaryType="cq:Widget"
    defaultValue="{Boolean}false"
    fieldDescription="this is a checkbox"
    fieldLabel="enable something"
    name="./checkbox"
    type="checkbox"
    xtype="selection" />
<textfield
    jcr:primaryType="cq:Widget"
    fieldDescription= "this is a textfield"
    fieldLabel="textfield..."
    name="./textfield"
    enable={boolean}checkbox   // something gose here to make it enable or disable...
    xtype="textfield"/>

1 个答案:

答案 0 :(得分:5)

是的,您可以通过将侦听器附加到选中该复选框时触发的selectionchanged事件来实现此目的。 API提供了为窗口小部件触发的公共事件列表。

为了将侦听器附加到事件,您需要在所需的窗口小部件下创建一个名为listeners的类型为nt:unstructured的节点,并将事件名称作为属性添加到节点,其值将为你想要执行的处理函数。

enter image description here

function(comp, val, isChecked) {
    var dlg = comp.findParentByType("dialog"); //find the dialog
    var textfield = dlg.getField("./textfield"); //get the field to disable

    /*hide or show component based on checked value */
    isChecked ? textfield.enable() : textfield.disable(); 
}

面板内对话框的结构是

<checkbox
    jcr:primaryType="cq:Widget"
    defaultValue="{Boolean}false"
    fieldDescription="this is a checkbox"
    fieldLabel="enable something"
    name="./checkbox"
    type="checkbox"
    xtype="selection">
    <listeners jcr:primaryType="nt:unstructured" selectionchanged="function(comp, val, isChecked) {
        var dlg = comp.findParentByType("dialog");
        var textfield = dlg.getField("./textfield");
        isChecked ? textfield.enable() : textfield.disable(); 
    }"/>
</checkbox>
<textfield
    jcr:primaryType="cq:Widget"
    fieldDescription= "this is a textfield"
    fieldLabel="textfield..."
    name="./textfield"
    xtype="textfield"/>