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 で行う必要があるのでしょうか? ボタンのアクティブ化でクライアント アクションを使用しないのはなぜですか? これが含まれていないより大きな関数呼び出しの一部でない場合は、単にイベント コードを Server から Client に変更し、Toaster 関数をそのように呼び出します。これにより、不要な機能を避けるために eventHandler に submit="false" を残して、何も送信する必要がなくなります。

于 2013-08-06T11:20:02.700 に答える