我在重复控制中有一个字段。现在,我在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