【问题标题】:Change component value when dialog is cancel on a xpage在 xpage 上取消对话框时更改组件值
【发布时间】:2017-09-14 17:26:05
【问题描述】:

我有一个无线电组,它有两个值“OK”(默认)和“Log”。检查值“日志”时,此选项将打开一个extlib对话框。如果对话框被取消,我想要的是一种将单选组值设置回“确定”的方法。单选组位于自定义控件中,该控件位于重复中,这是困难所在。该对话框用于保存来自调用 xpage 的单独文档。 当使用 jquery 对单个无线电组进行模拟以将值设置回“Ok”时,此概念有效,但我无法通过重复获得正确的组件 ID。

谢谢

<xp:view
    xmlns:xp="http://www.ibm.com/xsp/core"
    xmlns:xe="http://www.ibm.com/xsp/coreex"
    xmlns:xc="http://www.ibm.com/xsp/custom">
    <xp:this.data>
        <xp:dominoDocument
            var="document1"
            formName="frRegion">
        </xp:dominoDocument>
    </xp:this.data>
    <xp:this.resources>
        <xp:script
            src="js/jquery-3.1.1.min.js"
            clientSide="true">
        </xp:script>
        <xp:styleSheet href="/dynFields.css"></xp:styleSheet>
    </xp:this.resources>
    &#160;
    <xp:br>
    <p>TEST This</p></xp:br>
    <xp:inputText id="inputText1" value="#{document1.fRegion}"></xp:inputText>
    <xp:br></xp:br>
    <xp:repeat
        var="rownum"
        indexVar="rowIndex">
        <xp:this.value><![CDATA[#{javascript:[1,2]}]]></xp:this.value>
        <xc:ccDynRadioGroup
            dialogEnable="true"
            dataSource="#{javascript:document1}"
            defaultValue="Ok">
            <xc:this.selectItems><![CDATA[#{javascript:"Ok|Ok,Log|Log"}]]></xc:this.selectItems>
            <xc:this.fieldName><![CDATA[#{javascript:"C_"+rownum

}]]></xc:this.fieldName>
        </xc:ccDynRadioGroup>
    </xp:repeat>    
    <xp:br></xp:br>


    <xe:dialog id="dialog1">
        <xe:this.dojoAttributes>
            <xp:dojoAttribute
                name="disableCloseButton"
                value="false">
            </xp:dojoAttribute>
        </xe:this.dojoAttributes>
        <xp:panel>
            <xp:table>
                <xp:tr>
                    <xp:td>
                        <xp:label
                            value="TEST"
                            id="label1">
                        </xp:label>
                    </xp:td>
                    <xp:td></xp:td>
                </xp:tr>
                <xp:tr>
                    <xp:td>
                        <xp:button
                            value="DummySave"
                            id="button1">
                            <xp:eventHandler
                                event="onclick"
                                submit="true"
                                refreshMode="complete">
                                <xp:this.action><![CDATA[#{javascript:var  c = getComponent("dialog1");
c.hide();}]]></xp:this.action>
                            </xp:eventHandler>
                        </xp:button>
                    </xp:td>
                    <xp:td>
                        <xp:button
                            value="Cancel"
                            id="button2">
                            <xp:eventHandler
                                event="onclick"
                                submit="false">
                                <xp:this.script><![CDATA[var v =  "dialog1"
if(v == "dialog1"){
    XSP.closeDialog("#{id:dialog1}");
    $(xId("#{id:rg_Insp}")+".RadioGroupD"+" [value=Ok]").prop("checked",true);  
}

function x$(idTag, param){ //Updated 18 Feb 2012
   idTag=idTag.replace(/:/gi, "\\:")+(param ? param : "");
   return($("#"+idTag));
}

function xId(id){
 id = id.replace(/:/gi, "\\:");
 return "#"+id;
}]]></xp:this.script>
                            </xp:eventHandler>
                        </xp:button>
                    </xp:td>
                </xp:tr>
            </xp:table>
        </xp:panel>
        <xp:eventHandler
            event="onClose"
            submit="false">
            <xe:this.script><![CDATA[//$(xId("#{id:rg_Insp}")+".RadioGroupD"+" [value=Ok]").prop("checked",true);]]></xe:this.script>
        </xp:eventHandler>
    </xe:dialog>

    </xp:view>

<?xml version="1.0" encoding="UTF-8"?>
<xp:view
    xmlns:xp="http://www.ibm.com/xsp/core">
    <xp:radioGroup
        id="rg_Insp"
        value="#{compositeData.dataSource[compositeData.fieldName]}"
        styleClass="RadioGroupD" defaultValue="#{javascript:compositeData.defaultValue}">
        <xp:selectItems>
            <xp:this.value><![CDATA[#{javascript:@Explode(compositeData.selectItems,",")}]]></xp:this.value>
        </xp:selectItems>
        <xp:eventHandler
            event="onchange"
            submit="true"
            refreshMode="complete">
            <xp:this.action><![CDATA[#{javascript:if(compositeData.dialogEnable){
    var v:string = getComponent("rg_Insp").getValue();
    if(v.equalsIgnoreCase("Log")){
        var d = getComponent("dialog1");
        d.show();
    }
}}]]></xp:this.action>
        </xp:eventHandler>
    </xp:radioGroup>
</xp:view>

【问题讨论】:

  • 你能提供你的源代码吗?
  • 这里是样机代码,我是jquery 3.1.1

标签: jquery dialog xpages


【解决方案1】:

尝试将对话框放在重复中,这样当您计算 id 时,对话框将位于同一个“命名容器”中

你可能会想'我不想创建一千个对话框'但不要担心,只要你没有在重复中设置 repeatControls="true",仍然只有一个对话框,但现在知道当前的重复迭代,所以应该选择当前无线电组的正确 id

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-08-04
    • 1970-01-01
    • 2016-08-31
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多