我正在看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页面
答案 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,您可以访问它。