這是之前發佈的後續操作。我能夠將它隔離到儘可能簡單的情況。 在我正在處理的應用程序中,我想根據在用戶打開文檔時可能會更改的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,然後進行部分刷新,否則不會做任何更新。 –