0

我有一种情况,我有一组嵌套的重复控件。我想做的是能够在关闭对话框后仅刷新重复控件的选定部分。我可以在对话框的 hide 方法中将要刷新的元素指定为参数,如下所示:

dialog1.hide("repeat1");

其中dialog1是对话框repeat1的组件名称,是要刷新的重复控件的组件名称。

如果我刷新顶层,那么所有下级都会刷新。如果我刷新第二级,则仅刷新第 2 级重复控件的第一次出现。同样,如果我刷新第三级,则仅刷新第三级的第一次出现。

似乎没有明显的方法来刷新,比如说,只有第二级重复控件或第三级重复控件。有人理解这种行为吗?

<?xml version="1.0" encoding="UTF-8"?>
<xp:view xmlns:xp="http://www.ibm.com/xsp/core" xmlns:xe="http://www.ibm.com/xsp/coreex">
    <xp:br></xp:br>
    <xp:panel id="panel1">
        <xp:button value="Label" id="button3">
            <xp:eventHandler event="onclick" submit="true"
                refreshMode="partial" refreshId="dialog1">
                <xp:this.action><![CDATA[#{javascript:getComponent("dialog1").show();}]]></xp:this.action>
            </xp:eventHandler>
        </xp:button>
        <xp:br></xp:br>
        <xp:text escape="true" id="computedField4" value="#{javascript:@Now()}">
            <xp:this.converter>
                <xp:convertDateTime type="both"></xp:convertDateTime>
            </xp:this.converter>
        </xp:text>
        <xp:repeat id="repeat1" rows="30" var="rowdata" style="border:1px solid red"
            repeatControls="true" removeRepeat="true">
            <xp:this.value><![CDATA[#{javascript:[1, 2, 3]}]]></xp:this.value>
            <xp:text escape="true" id="computedField1" value="#{javascript:rowdata}">
                <xp:this.converter>
                    <xp:convertNumber type="number" integerOnly="true">
                    </xp:convertNumber>
                </xp:this.converter>
            </xp:text>
            &#160;-&#160;
            <xp:text escape="true" id="computedField7" value="#{javascript:@Now()}">
                <xp:this.converter>
                    <xp:convertDateTime type="both"></xp:convertDateTime>
                </xp:this.converter>
            </xp:text>
            <xp:br></xp:br>
            <xp:repeat id="repeat2" rows="30" var="rowdata"
                style="margin:1em; border:1px solid green" repeatControls="true"
                removeRepeat="true">
                <xp:this.value><![CDATA[#{javascript:["a", "b", "c"]}]]></xp:this.value>
                <xp:text escape="true" id="computedField2" value="#{javascript:rowdata}">
                    <xp:this.converter>
                        <xp:convertNumber type="number" integerOnly="true">
                        </xp:convertNumber>
                    </xp:this.converter>
                </xp:text>
                &#160;-&#160;
                <xp:text escape="true" id="computedField5" value="#{javascript:@Now()}">
                    <xp:this.converter>
                        <xp:convertDateTime type="both"></xp:convertDateTime>
                    </xp:this.converter>
                </xp:text>
                <xp:br></xp:br>
                <xp:repeat id="repeat3" rows="30" var="rowdata"
                    style="margin:1em; border:1px solid orange" repeatControls="true"
                    removeRepeat="true">
                    <xp:this.value><![CDATA[#{javascript:[1, 2, 3]}]]></xp:this.value>
                    <xp:text escape="true" id="computedField3" value="#{javascript:rowdata}">
                        <xp:this.converter>
                            <xp:convertNumber type="number" integerOnly="true">
                            </xp:convertNumber>
                        </xp:this.converter>
                    </xp:text>
                    &#160;-&#160;
                    <xp:text escape="true" id="computedField6" value="#{javascript:@Now()}">
                        <xp:this.converter>
                            <xp:convertDateTime type="both"></xp:convertDateTime>
                        </xp:this.converter>
                    </xp:text>
                    <xp:br></xp:br>
                </xp:repeat>
            </xp:repeat>
        </xp:repeat>
    </xp:panel>
    <xe:dialog id="dialog1" title="Dialog box">
        <xp:panel>
            <xe:dialogButtonBar id="dialogButtonBar1">
                <xp:panel>
                    <xp:button value="OK - Refresh repeat1" id="button1">
                        <xp:eventHandler event="onclick" submit="true"
                            refreshMode="complete">
                            <xp:this.action><![CDATA[#{javascript:getComponent("dialog1").hide("repeat1")}]]></xp:this.action>
                        </xp:eventHandler>
                    </xp:button>
                    <xp:button value="OK - Refresh repeat2" id="button4">
                        <xp:eventHandler event="onclick" submit="true"
                            refreshMode="complete">
                            <xp:this.action><![CDATA[#{javascript:getComponent("dialog1").hide("repeat2")}]]></xp:this.action>
                        </xp:eventHandler>
                    </xp:button>
                    <xp:button value="OK - Refresh repeat3" id="button2">
                        <xp:eventHandler event="onclick" submit="true"
                            refreshMode="complete">
                            <xp:this.action><![CDATA[#{javascript:getComponent("dialog1").hide("repeat3")}]]></xp:this.action>
                        </xp:eventHandler>
                    </xp:button>
                </xp:panel>
            </xe:dialogButtonBar>
        </xp:panel>
    </xe:dialog>
</xp:view>
4

1 回答 1

1

您是否考虑过在重复中放置一个面板(或最终是一个自定义控件),而不是针对重复,而是针对面板。有许多示例可以帮助您:

最终在您的重复中,您可能希望将本地 ID(生成的 ID)添加到本地 JS 对象,以便您拥有完全控制权。让我们知道怎么回事。

于 2013-05-15T03:03:56.580 回答