我想通过1个按钮的onclick进行2次部分刷新和1个文档保存。 我怎么能这样做? 到目前为止我尝试了什么:
在CCJS中,没有到服务器的总和
XSP.partialRefreshGet("#{id:PanelSubitem}", {
onComplete: function() {
XSP.partialRefreshGet("#{id:PanelSubsubitem}", {
onComplete: function() {
'#{javascript:document1.save()}';
}
});
}
});
结果:2次刷新工作但文档没有保存(正常,因为你无法使用ccjs访问后端。
将相同的代码放在SSJS中,使用部分refesh或完全刷新
结果:首先单击按钮刷新第一个面板,然后停止。第二次刷新将更新第二个Panel并停止。第三次单击按钮将保存文档。 (这也是正常的,因为部分或完全刷新代码与服务器选项的部分或完全刷新冲突,因为您一次只能刷新1次)
所以,如果我不能在SSJS中做到这一点而我无法在CSJS中做到这一点,我该怎么办呢?
答案 0 :(得分:1)
您可以尝试创建一个“保存”按钮,该按钮可以在通过CSJS完成第二次部分刷新后保存文档并自行部分刷新。所以你的代码片段会是这样的:
XSP.partialRefreshGet("#{id:PanelSubitem}", {
onComplete: function() {
XSP.partialRefreshGet("#{id:PanelSubsubitem}", {
onComplete: function() {
document.getElementById("#{id:btnSave}").click();
}
});
}
});
<xp:button value="Save" id="btnSave">
<xp:eventHandler event="onclick" submit="true" refreshMode="partial" refreshId="btnSave">
<xp:this.action><![CDATA[#{javascript:document1.save()}]]></xp:this.action>
</xp:eventHandler>
</xp:button>
您可以使用CSS隐藏“保存”按钮。
答案 1 :(得分:0)
一种可能的方法是利用CSJS后跟SSJS运行的事实。 SSJS只会运行CSJS返回true。
因此,对于您的按钮,您将现有的双部分刷新代码作为客户端代码添加到按钮的onClick事件中(也许您还需要添加return true
语句),然后添加您的文档将代码保存为SSJS到同一个onClick事件。
答案 2 :(得分:0)
<xp:eventHandler event="onclick" submit="true" refreshMode="complete">
<xp:this.action>
<xp:actionGroup>
<xp:executeScript>
<xp:this.script><![CDATA[#{javascript:document.save();}]]></xp:this.script>
</xp:executeScript>
</xp:actionGroup>
</xp:this.action>
<xp:this.onComplete><![CDATA[(function(){
XSP.partialRefreshGet("#{id:PanelSubItem}");
XSP.allowSubmit();
XSP.partialRefreshGet("#{id:PanelSubSubItem}");
})();]]>
</xp:this.onComplete>
</xp:eventHandler>