这是之前发布的后续操作。我能够将它隔离到尽可能简单的情况。 在我正在处理的应用程序中,我想根据在用户打开文档时可能会更改的applicationScope变量的值执行条件部分刷新。我无法得到它的工作,因为看起来partialRefresh目标只在pageLoad事件上被评估,而不是在调用partialRefresh时动态地评估。为了演示这一点,我创建了一个小测试XPage,在True和False之间切换viewScope变量,而不更新。然后是一个具有partialRefresh公式的按钮,该公式指定是否刷新panelTrue或panelFalse。默认情况下,当文档第一次打开时,它会刷新并显示panelFalse,因为vsIsTrue为null并被解释为False。如果我将vsISTrue切换为True,然后单击部分刷新按钮,您将看到panelFalse是刷新的面板,而不是panelTrue。我在部分刷新的公式中添加注释,部分刷新公式在每次刷新时执行并返回正确的过程,但是它绝不会将面板更改为实际刷新为panelTrue。有条件部分刷新
所以我想我的问题是 - 有没有不同的方式来完成?因为我看不到如何。我已经包括下面的源 - 请注意我用的调试工具栏,所以你可能需要删除dbBar引用:
<?xml version="1.0" encoding="UTF-8"?>
<xp:view xmlns:xp="http://www.ibm.com/xsp/core"
xmlns:xc="http://www.ibm.com/xsp/custom">
<xc:ccDebugToolbar defaultCollapsed="false" collapseTo="left"></xc:ccDebugToolbar>
<xp:br></xp:br>
<xp:br></xp:br>
<xp:button id="SetViewScope" value="Toggle View Scope">
<xp:eventHandler event="onclick" submit="true" refreshMode="norefresh">
<xp:this.action><![CDATA[#{javascript:(viewScope.get("vsIsTrue")) ? viewScope.put("vsIsTrue",false) : viewScope.put("vsIsTrue",true)}]]></xp:this.action>
</xp:eventHandler>
</xp:button>
<xp:button value="Partial Refresh" id="PartialRefresh">
<xp:eventHandler event="onclick" submit="true" refreshMode="partial"
refreshId='#{javascript:if (viewScope.get("vsIsTrue")){
dBar.info("Refesh panelTrue");
return "panelTrue";
break;
}else {
dBar.info("Refresh panelFalse");
return "panelFalse";
break;
}}'>
</xp:eventHandler>
</xp:button>
<xp:panel id="panelTrue">
This is panelTrue - viewScope(vsIsTrue) =
<xp:text escape="true" id="computedField1" value="#{viewScope.vsIsTrue}"></xp:text>
</xp:panel>
<xp:panel id="panelFalse">
This is panelFalse - viewScope(vsIsTrue;) =
<xp:text escape="true" id="computedField2" value="#{viewScope.vsIsTrue}"></xp:text>
</xp:panel>
</xp:view>
只是要清楚,你想防止在一定条件下刷新,还是你想改变*其*内容被刷新?在你之前的问题上,你的目标看起来像是前者,但在这个问题上你似乎在尝试后者。 –
ExtLib是一个选项吗?开关组件应该有帮助。 –
@Tim - 我想改变目标。范围变量发生变化时。它实际上会更像是如果vsIsTrue = true,然后进行部分刷新,否则不会做任何更新。 –