0

Jeremy Hodge http://xpagesblog.com/XPagesHome.nsf/Entry.xsp?documentId=88065536729EA065852578CB0066ADEC With Eventハンドラーによるこの投稿を見て、ClientSideJSから呼び出しました。しかし、私が発砲したいイベントの横にいくつかのSSJSを置くと、それらを機能させることができます。

これはまだ機能しますか、それとも私は何か間違ったことをしていますか?

    <xp:button value="click me" id="button1">
        <xp:eventHandler event="onclick" submit="true"
            refreshMode="complete">
            <xp:this.script><![CDATA[executeOnServer('dostuff');]]></xp:this.script>

        </xp:eventHandler>
    </xp:button>
    <xp:eventHandler event="onfubar" id="dostuff" submit="true">
        <xp:this.action><![CDATA[#{javascript:print("1");viewScope.data="Y"}]]></xp:this.action>
    </xp:eventHandler>

executeOnServer関数は、Jeremysページから直接取得されます

4

5 に答える 5

4

イベントがカスタムコントロールに含まれている場合、そのイベントはカスタムコントロールの子であり、XPageのイベントに別のIDがあります。

通常のXPageでのイベントのID:

view:_id1:dostuff

カスタムコントロールに含まれている場合:

view:_id1:_id5:dostuff

ここで、_id5はカスタムコントロールのIDです。

これは、現在のCSJSコードでは機能しません。

これを修正するには、カスタムコントロールにIDを追加します

 <xc:event id="abc"></xc:event>

次に、カスタムコントロールのIDを計算し、それをイベントに追加します。

<xp:button value="click meCC" id="button1">
    <xp:eventHandler event="onclick" submit="false"
        refreshMode="none">
        <xp:this.script><![CDATA[
        var ccId = '#{javascript:getComponent('abc').getId()}';
         executeOnServer(ccId + ':dostuff');]]></xp:this.script>
    </xp:eventHandler>
</xp:button>

お役に立てれば

スヴェン

于 2012-05-24T10:30:29.433 に答える
2

私のコードではなく、Executeonserverコードに問題が見つかりました。解決策を得るのを手伝ってくれたみんなに感謝します。

この行は、dojo.query('[name = "$$ xspsubmitid"]')[0] .value = form.id +':'+functionName;を変更する必要があります。

dojo.query('[name = "$$ xspsubmitid"]')[0] .value = functionName;

もちろん、答えがあれば、すべてが簡単に継ぎ目があります。

于 2012-05-29T14:56:20.093 に答える
1

まず、[クリックしてください]ボタンの場合、[サーバーオプション]を[送信なし]に設定する必要があります(refreshMode = "complete"を削除し、submit = "false"を設定します)。つまり、クライアントスクリプトのみを実行します(この場合は「dostuff」イベントを実行します)。次に、「dostuff」eventHandlerの「submit」パラメーターを「false」に設定する必要があります。

以下のコードは、「クリックしてください」ボタンをクリックすると、サーバーコンソールに「1」を出力します。お役に立てれば。

<xp:this.resources>
    <xp:script src="/executeOnServer.js" clientSide="true"></xp:script>
</xp:this.resources>

<xp:button value="click me" id="button1">
    <xp:eventHandler event="onclick" submit="false">
        <xp:this.script><![CDATA[executeOnServer("dostuff");]]></xp:this.script>
    </xp:eventHandler>
</xp:button>

<xp:eventHandler event="onfubar" id="dostuff" submit="false">
    <xp:this.action><![CDATA[#{javascript:print("1");}]]></xp:this.action>
</xp:eventHandler>
于 2012-05-23T15:23:29.560 に答える
0

これがあなたが探しているものであるかどうかはわかりませんが、私は主に拡張ライブラリ(xe:jsonRpcService)のリモートサービスコントロールを好みます。

于 2012-05-26T22:12:21.877 に答える
-1

Jeremy Hodgeは、このテーマについて素晴らしいブログ記事を書いています。 http://xpagesblog.com/XPagesHome.nsf/Entry.xsp?documentId=88065536729EA065852578CB0066ADEC

イベントハンドラーは、周囲のボタンがなくても存在でき、イベントハンドラーにIDを指定すると、それにアクセスできます。

于 2012-05-23T19:50:31.690 に答える