0

我有一个使用 view.postscript 的 xpage,如下所示:

<?xml version="1.0" encoding="UTF-8"?>
<xp:view xmlns:xp="http://www.ibm.com/xsp/core">
 <xp:this.resources>
 <xp:dojoModule name="dojox.widget.Toaster"></xp:dojoModule>
 <xp:styleSheet href="/.ibmxspres/dojoroot/dojox/widget/Toaster/Toaster.css"></xp:styleSheet>
 </xp:this.resources>

 <xp:scriptBlock id="scriptBlock1">
 <xp:this.value><![CDATA[var Toaster = function(id, msg, type, duration, pos) {
 type = (type == null) ? "message" : type;
 duration = (duration == null) ? "5000" : duration;
 pos = (pos == null) ? "br-up" : pos;

 var obj = dijit.byId(id);
 obj.positionDirection = pos;
 obj.setContent(msg, type, duration);
 obj.show();
}]]></xp:this.value>
 </xp:scriptBlock>

 <xp:div id="toaster" themeId="toaster" dojoType="dojox.widget.Toaster"></xp:div>

 <xp:button value="Toaster" id="button1">
 <xp:eventHandler event="onclick" submit="true"
 refreshMode="complete">
 <xp:this.action><![CDATA[#{javascript:view.postScript("Toaster('"+getComponent("toaster").getClientId(facesContext)+"', 'toaster message!')");}]]></xp:this.action>
 </xp:eventHandler>
 </xp:button>
</xp:view>

但是当我点击按钮时,烤面包机无法显示。为什么?我需要一种方法来显示 ssjs 函数调用的烤面包机。非常感谢。

4

1 回答 1

1

正如@Frantisek Kossuth 所说,您正在重新提交该页面。当您的 refreshMode 完成后,它将根据服务器值重新呈现页面。如果您想进行客户端更改并将其反映在您的 UI 中,则无法完成刷新。在不会更改的元素(如 button1)上对页面进行部分刷新应该更新您的 UI 而无需重建页面。

同样,为什么需要通过 SSJS 来完成?为什么不在按钮激活中使用客户端操作?如果这不是您不包括的更大函数调用的一部分,只需将事件代码从服务器更改为客户端,然后以这种方式调用 Toaster 函数。这也将允许您不必提交任何内容,在 eventHandler 中保留 submit="false" 以避免不必要的功能。

于 2013-08-06T11:20:02.700 回答