0

ネストされた繰り返しコントロールのセットがある状況があります。私がやりたいのは、ダイアログ ボックスを閉じた後、繰り返しコントロールの選択した部分だけを更新できるようにすることです。次のように、ダイアログ ボックスの hide メソッドで、更新する要素をパラメーターとして指定できます。

dialog1.hide("repeat1");

ここdialog1で、 はダイアログ ボックスrepeat1のコンポーネント名、 は更新する繰り返しコントロールのコンポーネント名です。

最上位レベルを更新すると、すべての下位レベルが更新されます。2 番目のレベルを更新すると、レベル 2 の繰り返しコントロールの最初のオカレンスのみが更新されます。同様に、3 番目のレベルを更新すると、最初に発生した 3 番目のレベルのみが更新されます。

たとえば、第 2 レベルのリピート コントロールまたは第 3 レベルのリピート コントロールのみを更新する明確な方法はないようです。誰もこの行動を理解していますか?

<?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 (生成されたもの) をローカル JS オブジェクトに追加して、完全に制御したい場合があります。それがどうなるか教えてください。

于 2013-05-15T03:03:56.580 に答える