我在重複控制中有一個字段。現在,我在onChange
事件中使用viewScope
來捕獲重複控件中的字段值。每次該字段必須進行部分刷新才能獲取範圍變量中設置的值。從重複控制獲取值
這裏的問題是,當用戶設置重複控制之外的焦點,焦點不設置,直到場的局部刷新完成。有時候,當用戶訪問遠程多米諾服務器時,局部刷新速度太慢。提交表單時,是否有一種有效的方法來捕獲重複控制中的值?
這個想法是當用戶點擊添加按鈕時動態創建字段。將焦點從重複控制內的區域移動到重複控制區域外時,會出現問題。直到重複控制內的字段部分刷新完成,焦點纔會被設置。如果服務器在您的機器上本地運行,則可能不會發生這種情況。下面的代碼顯示了重複控制的使用,以創建字段動態
<xp:button value="Add Objects" id="addNavObj">
<xp:eventHandler event="onclick" submit="true"
refreshId="objLine" refreshMode="partial" id="eventHandler24">
<xp:this.action><![CDATA[#{javascript:viewScope.rowItems=viewScope.rowItems+1;getComponent("navObjRep").setValue(parseInt(viewScope.rowItems));}]]></xp:this.action>
</xp:eventHandler>
</xp:button>
<xp:repeat rows="30" var="rowData" indexVar="rowIndex"
repeatControls="false" first="0" value="#{javascript:viewScope.rowItems}"
id="navObjRep" style="width:800.0px">
<xp:panel style="width:800.0px" id="objLine">
<xp:table style="width:800.0px">
<xp:tr>
<xp:td style="width:245.0px">
<xp:inputText id="objType" style="width:130.0px">
<xp:typeAhead mode="full" minChars="1" ignoreCase="true"
id="typeAhead4" rendered="false">
</xp:typeAhead>
</xp:inputText>
</xp:td>
<xp:td style="width:46.0px">
<xp:inputText id="objCode">
<xp:eventHandler event="onchange" submit="true"
refreshMode="partial" refreshId="objCode" id="eventHandler3">
<xp:this.action><![CDATA[#{javascript:viewScope['objCode'+rowIndex] = getComponent("objCode").getValue()}]]></xp:this.action>
</xp:eventHandler>
</xp:inputText>
</xp:td>
<xp:td style="width:300.0px">
<xp:inputTextarea id="objDesc" style="height:40.0px;width:200.0px">
<xp:eventHandler event="onclick" submit="false" id="eventHandler40"></xp:eventHandler>
<xp:eventHandler event="onchange" submit="true"
refreshMode="partial" refreshId="objDesc" id="eventHandler4">
<xp:this.action><![CDATA[#{javascript:viewScope['objDesc'+rowIndex] = getComponent("objDesc").getValue()}]]></xp:this.action>
</xp:eventHandler>
</xp:inputTextarea>
</xp:td>
</xp:tr>
</xp:table>
</xp:panel>
</xp:repeat>
您需要退一步:您嘗試實現的功能是什麼?最終,解決方案與您的方法完全不同。所以多分享一點! – stwissel 2013-05-06 10:44:02
只是爲了清楚我明白你:當你點擊按鈕刷新整個重複控制,你也可以在onTextArea的onChange處理程序中執行此操作(爲什麼那個?OnChange會很頻繁地觸發,除非你有複選框/收音機/下拉菜單它往往會在往返中造成很多問題)。響應需要一些時間(網絡,CPU),所以一旦數據回來,它就會擾亂客戶端的焦點。 - 你想要達到什麼用戶體驗?我仍然缺少那部分。 – stwissel 2013-05-06 22:48:54
在上面的標記中,每次單擊添加對象按鈕時,刷新重複控件以添加具有動態創建字段的新表格行。具有部分刷新的onChange事件被設置爲內部的所有字段以捕獲字段內的值並在viewScope中設置。如果用戶想要爲他們的購買訂單添加新的行項目或爲每個活動添加時間表那天 – shibu 2013-05-07 03:56:37