我在BeforePageKoad事件中运行了SSJS。作为SSJS的最后一步,我想做部分刷新。在我的脚本中,我有这行代码:
view.postScript("partialRefreshGet('#{id:panelAll}')")
当它执行时,我得到一个错误,表示partialRefreshGet未定义。我猜我错过了调用格式的东西,但据我所知,这应该有效。 以前做过类似事情的人。 如果我保留此代码,则手动刷新panelAll从按钮一切正常。
答案 0 :(得分:4)
您不能在beforePageLoad中的view.postScript之前使用。尝试将其移至afterPageLoad或beforeRenderResponse。我最近碰到了同样的问题。
http://notesspeak.blogspot.com/2013/08/viewpostscript-only-works-for-certain.html
以下是可以使用view.postScript()的摘要:
要知道为什么会这样,请阅读Tim Tripcony在博客文章底部的评论。
答案 1 :(得分:3)
只需使用所需的部分刷新向您的XPage添加一个脚本块。
修改强>
<xp:scriptBlock id="scriptBlock2" rendered="#{javascript:requestScope.doRefresh}">
<xp:this.value><![CDATA[
XSP.addOnLoad( function(){ XSP.partialRefreshGet('#{id:panelAll}') } );
]]>
</xp:this.value>
</xp:scriptBlock>
在 beforePageLoad 中,然后根据需要设置requestScope变量。
答案 2 :(得分:1)
这个答案可能有点太晚了,我希望这对某人有用。
因此,简单的答案是使用以下SSJS刷新另一个组件:
<input ng-model="editItem.foo">
view.postScript("XSP.partialRefreshGet('#{id:
Component ID
然而,我在尝试它时遇到了麻烦,正如Tim Tripcony建议的那样,代码似乎运行得太快,而浏览器仍在接收第一次刷新,但它不起作用。所以我尝试将它附加在OnLoad事件中,如下所示:
}')")
view.postScript("XSP.addOnLoad(function() {XSP.partialRefreshGet('#{id:
Component ID
但那也行不通。所以我用旧的方式做了它,它使用 setTimeout()让脚本在不同的线程中工作:
}')})")
view.postScript("setTimeout(function(){XSP.partialRefreshGet('#{id:
Component ID
它的工作就像一个魅力!