我在 BeforePageKoad 事件中运行了一个 SSJS。作为 SSJS 的最后一步,我想做部分刷新。在我的脚本中,我有这行代码:
view.postScript("partialRefreshGet('#{id:panelAll}')")
当它执行时,我收到一个错误,指出 partialRefreshGet 未定义。我猜我在通话格式中遗漏了一些东西,但据我了解,这应该可以。以前有人做过这样的事情。如果我忽略此代码,则从按钮手动刷新 panelAll 一切正常。
我在 BeforePageKoad 事件中运行了一个 SSJS。作为 SSJS 的最后一步,我想做部分刷新。在我的脚本中,我有这行代码:
view.postScript("partialRefreshGet('#{id:panelAll}')")
当它执行时,我收到一个错误,指出 partialRefreshGet 未定义。我猜我在通话格式中遗漏了一些东西,但据我了解,这应该可以。以前有人做过这样的事情。如果我忽略此代码,则从按钮手动刷新 panelAll 一切正常。
不能在 beforePageLoad 中使用 before view.postScript。尝试将其移至 afterPageLoad 或 beforeRenderResponse。我最近遇到了同样的问题。
http://notesspeak.blogspot.com/2013/08/viewpostscript-only-works-for-certain.html
这是您可以使用 view.postScript() 的摘要:
要了解发生这种情况的原因,请阅读博文底部的 Tim Tripcony 评论。
只需将脚本块添加到您的 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 变量。
这个答案可能有点太晚了,我希望它对某人有用。
因此,简单的答案是使用以下 SSJS 刷新另一个组件:
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
}')}, 1)");
它就像一个魅力!