从客户端JS调用事件处理程序

时间:2012-05-23 13:52:56

标签: xpages xpages-ssjs

我正在看Jeremy Hodge的这篇文章 http://xpagesblog.com/XPagesHome.nsf/Entry.xsp?documentId=88065536729EA065852578CB0066ADEC 使用Event处理程序并从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页面

5 个答案:

答案 0 :(得分:3)

如果事件包含在自定义控件中,则事件是自定义控件的子级,然后在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>

希望这有帮助

斯文

答案 1 :(得分: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>

答案 2 :(得分:1)

发现问题我的代码不在我的代码中,而是在Executeonserver代码中。 感谢大家的帮助,以获得解决方案。

这条线需要改变    dojo.query('[name =“$$ xspsubmitid”]')[0] .value = form.id +':'+ functionName;

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

当然,当你得到答案时,一切都很简单。

答案 3 :(得分:0)

我不知道这是否是您正在寻找的,但我更喜欢扩展库中的远程服务控件(xe:jsonRpcService)。

答案 4 :(得分:-1)

Jeremy Hodge写了一篇关于这个主题的博客文章。 http://xpagesblog.com/XPagesHome.nsf/Entry.xsp?documentId=88065536729EA065852578CB0066ADEC

事件处理程序可以在没有周围按钮的情况下存在,为事件处理程序提供一个id,您可以访问它。