2014-04-04 178 views
1

我有一些客户端代码,我想将其放入某种可以从每个字段的onChange事件中调用的子例程。可以说这是一个代表小时的字段,onchange事件将其与付款率相乘,并与订单项付费总额一起出来。有7个这样的条目,每次我进行计算时,我想重新计算每条线上的总数以达到总计。xPages - 创建自定义事件

我看到xPages事件有一个名为组件(接收)我把我的主人总代码在那里,但在执行时,它不能识别处理程序名称。代码看起来像这样;

<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(...) 

我不知道该把它放在哪里。这方面的帮助不是很好。

+0

看起来您可以获得每个元素的innerHTML的句柄,但是您不会在脚本中对它进行任何操作。我是否认为这是一个不完整的脚本? –

+0

是的,它不完整。当我看到元素在调试器中正确转换时,我会写剩下的部分。 (我应该注意到,但是已经很晚了,那是星期五.....) – cjames728

回答

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事件中都没有CODE的字段中,但将onchange标记为对总字段进行部分刷新。

+0

我提供的代码是不完整的,因为我想在完成它之前正确地看到它们被翻译。是不是getComponent一个服务器端命令?我试图在客户端完全做到这一点。这些字段是绑定的,所以他们会在我保存文档时进行更新。我宁愿保持这种方式,并避免任何刷新,因为我观察到它失去了下一个领域的焦点。 – cjames728

+0

getComponent是一个全局函数,并获取UI组件的句柄。我的理解是它的目的是在客户端使用。它返回一个javax.faces.component.UIComponent类的对象 –

+1

我一直尝试使用getComponent函数时运气不好。在这种情况下,调试器显示它已将字段转换成OK,但它仍然返回,试图获得该字段的句柄。把它改回XSP.getElementById,它就像一个冠军。无论如何,正是我所期待的。非常感谢! – cjames728