0

我正在查看 Jeremy Hodge 的这篇文章 http://xpagesblog.com/XPagesHome.nsf/Entry.xsp?documentId=88065536729EA065852578CB0066ADEC 使用事件处理程序并从 ClientSide JS 调用它们。但是,如果我将一些 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

首先,对于“click me”按钮,“Server Options”应该设置为“No Submission”(删除 refreshMode="complete" 并设置 submit="false")。这意味着它只执行客户端脚本(在这种情况下运行“dostuff”事件)。其次,“dostuff”事件处理程序中的“提交”参数应设置为“假”。

单击“单击我”按钮时,下面的代码将在服务器控制台中打印“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 回答