xPages - 创建自定义事件

时间:2014-04-04 20:31:03

标签: events xpages

我有一些客户端代码,我想将其放入某种子程序中,我可以从每个字段的onChange事件中调用它。让我们说这是一个表示小时数的字段,onchange事件将其与支付率相乘,并与行项目支付总额一起出来。这样有7个条目,每次进行计算时,我都想重新计算每行的总数,以得出总数。

我看到xPages事件有一个名为Components(Receive)的片段我把我的母版总代码放在那里但是在执行时,它不识别处理程序名称。代码看起来像这样;

    <xp:platformEvent id="platformEvent1"  eventName="HoursUpdated">
        <xp:eventHandler event="onevent" submit="false">
            <xp:this.script><![CDATA[// Perform totals calculation
    // get the dojo currency code
    dojo.require("dojo.currency");
    p1 = XSP.getElementById("#{id:PayAmount1}").innerHTML;
    p2 = XSP.getElementById("#{id:PayAmount2}").innerHTML;
    p3 = XSP.getElementById("#{id:PayAmount3}").innerHTML;
    p4 = XSP.getElementById("#{id:PayAmount4}").innerHTML;
    p5 = XSP.getElementById("#{id:PayAmount5}").innerHTML;
    p6 = XSP.getElementById("#{id:PayAmount6}").innerHTML;
    p7 = XSP.getElementById("#{id:PayAmount7}").innerHTML;  
]]></xp:this.script>
        </xp:eventHandler>
    </xp:platformEvent>

我从像这样的onchange事件中调用它;

HoursUpdated.dispatchEvent();

我在运行时遇到错误,它无法看到HoursUpdate事件。当我查看代码时,它会在那里给出一个非常疯狂的ID。我甚至尝试通过该ID调用它,但它失败了。

我在帮助中看到了一句话;

 XSP.publishEvent(...)

我不确定在哪里放置它。这方面的帮助不是很好。

1 个答案:

答案 0 :(得分:1)

我认为你过度思考这个问题,但我可能只是忽略了这一点。

您可以在XPage上放置一个scriptblock并从中调用您的函数。假设XPages绑定到NotesDocument doc:

<xp:scriptBlock id="myScrip">
<xp:this.value><![CDATA[var updateValues = function(){
var p1 = getComponent("#{id:PayAmount1}").getValue();
var p2 = getComponent("#{id:PayAmount2}").getValue();
var p3 = getComponent("#{id:PayAmount3}").getValue();
var p4 = getComponent("#{id:PayAmount4}").getValue();
var p5 = getComponent("#{id:PayAmount5}").getValue();
var p6 = getComponent("#{id:PayAmount6}").getValue();
var p7 = getComponent("#{id:PayAmount7}").getValue();
var pTotal = p1 + p2 + p3 + p4 + p5 + p6 + p7;
doc.setValue("#{id:PayTotal}", pTotal);
}
</xp:scriptBlock>

然后,在每个字段的onchange事件中,只需使用updateValues();作为剧本。

或者,将计算(无论它是什么)放入您希望显示更新值的字段中,并在每个onchange事件中使用NO CODE,但标记onchange以对总字段进行部分刷新。