0

Tim Tripconyの提案に基づいて、以下に簡単なxpageを実装しました。これにより、noを拡張できます。ユーザーが[さらに追加]ボタンをクリックしたときに表示されるフィールドの数。[追加]ボタンが部分的な更新を実行し、noを拡張すると、部分的な更新でデータが記憶されないという問題があります。行の。

<?xml version="1.0" encoding="UTF-8"?>
<xp:view xmlns:xp="http://www.ibm.com/xsp/core" dojoForm="true">
    <xp:this.data>
        <xp:dominoDocument var="newDoc" formName="frmAddMore"></xp:dominoDocument>
    </xp:this.data>
    <xp:this.afterPageLoad><![CDATA[#{javascript:viewScope.rowCount = new java.lang.Integer(5);}]]></xp:this.afterPageLoad>
    <xp:div id="parentDiv">
        <xp:repeat indexVar="fieldSuffix" value="#{viewScope.rowCount}"
            rows="#{viewScope.rowCount}" var="row">
            <xp:div>
                <xp:inputText id="KeyNo">
                    <xp:this.value><![CDATA[#{newDoc["KeyNo_#{fieldSuffix}"]}]]></xp:this.value>
                </xp:inputText>
                <xp:inputText id="Qty">
                    <xp:this.value><![CDATA[#{newDoc["Quantity_#{fieldSuffix}"]}]]></xp:this.value>
                </xp:inputText>
            </xp:div>
        </xp:repeat>
        <xp:button value="Add More" id="btnAddMore"
            execMode="partial">
            <xp:eventHandler event="onclick" submit="true"
                execMode="partial" execId="parentDiv" refreshMode="partial" refreshId="parentDiv">
                <xp:this.action><![CDATA[#{javascript:viewScope.rowCount = new java.lang.Integer(viewScope.rowCount + 5);}]]></xp:this.action>
                <xp:this.script>
                    <xp:executeClientScript
                        script="dojo.window.scrollIntoView(dojo.byId('#{id:btnAddMore}').id);">
                    </xp:executeClientScript>
                </xp:this.script>
            </xp:eventHandler>
        </xp:button>
    </xp:div>
</xp:view>

ここで何が欠けていますか?

dojo.window.scrollIntoViewクライアントサイドJS関数が機能しないことにも気づきましたか?どんな助けでも大歓迎です。

4

2 に答える 2

1

あなたのコードでは、データが実際にドキュメントのどこに保存されているのかわかりません。したがって、rowdataが更新されるたびに、フィールドを繰り返し処理し、からデータを取得します。データが保存されないため、ユーザーが入力したデータが失われます。

簡単な保存アクションをpartialrefreshに追加すると、機能するはずです。必要に応じて検証を無効にして、ユーザーが何らかの保存ボタンをクリックしたときにのみ検証が行われるようにします。

于 2012-04-04T05:05:42.997 に答える
1

データを保持しているものが更新されていない場合、部分的な更新によってデータが失われることはありません。部分的な更新と完全な更新の唯一の違いは、部分的な更新はページの領域でのみ発生することです。この例では、すべてのコントロールを含む更新された「parentDiv」であるため、parentDivは完全に再読み込みされます。

たとえば、inputText "KeyNo"を部分的に更新すると、データは失われますが、入力テキスト "Qty"は失われます。これは、"Qty"が更新によって変更されているためです。

于 2012-04-04T07:27:11.517 に答える