如何刷新csjs中的一个字段?代码在这里:
<xp:repeat id="repeat1" rows="30" var="currentDetail" indexVar="detailIndex" value="#{LeaveBean.details}">
<xp:inputText id="leavefrom" value="#{currentDetail.subfromtime}">
<xp:eventHandler event="onblur" submit="false" refreshMode="partial" refreshId="repeat1">
<xp:this.script><![CDATA[
XSP.partialRefreshPost('#{id:view:_id1:repeat1:0:leavefrom}');
var detailIndex = document.getElementById("#{id:detailIndexText}").innerHTML;
myRPC.checkfromdate(detailIndex).addCallback(function(returnAlert){alert(returnAlert);});
]]></xp:this.script>
</xp:eventHandler>
</xp:inputText>
</xp:repeat>
我想要做的就是从csjs中调用ssjs,但是对我来说奇怪的是点击事物没有立即起作用,例如,当我第一次打开页面时,点击输入字段,并输入&#34; 1&#34;在它,它应该是弹出警报,就在我离开现场,但没有任何事情发生,然后我再次点击这个字段,然后输入&#34; 2&#34;,然后我离开了现场,但我刚收到警报& #34; 1&#34;在屏幕上......抱歉我的表情很差......
所以我的问题是我应该立即刷新字段,但是为什么XSP.partialRefreshPost无效?我试图刷新repeat1,无法正常工作
更新2015/06/13: 最后,我找到了view.postScript .... so ....
答案 0 :(得分:2)
一个明显的问题是partialRefreshPost id不起作用。您正在组合运行服务器端的#{id:...}
来计算相应的客户端ID。但是,您传递的ID是重复的第一行的客户端ID。即使它对应于服务器端组件,您也会尝试对每一行进行硬编码以映射到重复行1中的字段(“repeat1:0”)。
是否有理由不使用正常的局部刷新并使用SSJS中的view.postScript将CSJS发布回浏览器?无论如何,您正在触发部分刷新发布数据。我不确定你的代码的最后一行是做什么的,但似乎它正在调用另一个服务器端请求来添加响应。所以代码似乎对服务器进行了两次调用,以触发警报。我不知道设计以及随后的rpc调用正在做什么,但是如果它可以在单个部分刷新中实现,那似乎会更好。