0

根据 Tim Tripcony 的建议,我在下面实现了一个简单的 xpage,它允许我扩展 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

如果没有刷新保存数据的内容,则部分刷新不会丢失数据。部分刷新和完全刷新之间的唯一区别是,部分只发生在页面的一个区域,在这个例子中,你刷新了包含所有控件的“parentDiv”,所以 parentDiv 将被完全重新加载。

例如,如果您在哪里部分刷新 inputText“KeyNo”,这个会丢失其数据,但输入文本“Qty”不会,因为“Qty”正在被刷新触及。

于 2012-04-04T07:27:11.517 回答
1

在您的代码中,我看不到数据实际保存在文档上的位置。因此,每当刷新行数据时,它都会遍历字段并从中检索数据。因为没有保存数据,所以您丢失了用户输入的数据。

向部分刷新添加一个简单的保存操作,它应该可以工作。如果您愿意,请禁用验证,仅当用户单击某种保存按钮时才进行验证。

于 2012-04-04T05:05:42.997 回答