使用view.PostScript从SSJS调用partialRefreshGet

时间:2013-09-20 21:13:53

标签: xpages client-side xpages-ssjs

我在BeforePageKoad事件中运行了SSJS。作为SSJS的最后一步,我想做部分刷新。在我的脚本中,我有这行代码:

view.postScript("partialRefreshGet('#{id:panelAll}')")

当它执行时,我得到一个错误,表示partialRefreshGet未定义。我猜我错过了调用格式的东西,但据我所知,这应该有效。 以前做过类似事情的人。 如果我保留此代码,则手动刷新panelAll从按钮一切正常。

3 个答案:

答案 0 :(得分:4)

您不能在beforePageLoad中的view.postScript之前使用。尝试将其移至afterPageLoad或beforeRenderResponse。我最近碰到了同样的问题。

http://notesspeak.blogspot.com/2013/08/viewpostscript-only-works-for-certain.html

以下是可以使用view.postScript()的摘要:

  1. onClientLoad =没有任何反应
  2. beforePageLoad = XSP错误
  3. afterPageLoad = WORKS!
  4. afterRestoreView =没有任何反应
  5. beforeRenderResponse = WORKS!
  6. afterRenderResponse =没有任何反应
  7. 要知道为什么会这样,请阅读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

它的工作就像一个魅力!