2014-04-04 4 views
1

각 클라이언트의 onChange 이벤트에서 호출 할 수있는 일종의 서브 루틴을 작성하려고합니다. 시간을 나타내는 필드라고 말하면 onchange 이벤트는이를 지불 비율과 곱하고 항목 총액을 지불합니다. 이와 같이 7 개의 항목이 있으며 계산할 때마다 총계에 도달하기 위해 각 행의 총계를 다시 계산하고 싶습니다.xPages - 맞춤 이벤트 만들기

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를 주었다. 나는 그 신분증으로 부름을 시도해도 실패합니다.

나는 도움이 줄을 보았다.

XSP.publishEvent(...) 

어디에 배치해야할지 모르겠습니다. 이 분야의 도움은 실제 좋지 않습니다.

+0

각 요소의 innerHTML에 대한 핸들을 얻는 것처럼 보입니다. 그러나 스크립트에서이 요소를 사용하지는 않습니다. 내가 불완전한 스크립트라고 생각하는 것이 맞습니까? –

+0

예, 불완전합니다. 요소가 디버거에서 제대로 번역 된 것을 볼 때 나머지는 씁니다. (나는 그것을 알아야했지만, 늦었습니다. 금요일이었습니다 .....) – cjames728

답변

1

나는 당신이 문제를 과도하게 생각하고 있다고 생각하지만, 나는 그 요점을 놓칠지도 모른다.

XPage에 스크립트 블록을 삽입하고 함수를 호출 할 수 있습니다. XPages가 NotesDocument의 문서에 바인딩된다고 가정 : 각 필드의 onchange를 이벤트에서,

<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> 

그리고, 단지) (updateValues를 사용; 스크립트로.

또는 업데이트 된 값을 표시 할 필드에 계산을 넣고 각 onchange 이벤트에 NO CODE가 있지만 onchange를 표시하여 전체 필드의 부분 새로 고침을 수행하십시오.

+0

내가 끝내기 전에 제대로 번역 된 것을보고 싶기 때문에 내가 제공 한 코드가 불완전했습니다. getComponent가 서버 측 명령이 아닙니까? 클라이언트 측에서이 작업을 완전히 수행하려고합니다. 필드는 바운드되어 있으므로 문서를 저장할 때 업데이트됩니다. 차라리 다음 필드 초점을 잃어버린 것을 보았을 때 나는 그런 식으로 유지하고 새로 고침을 피할 것입니다. – cjames728

+0

getComponent는 전역 함수이며 UI 구성 요소에 대한 핸들을 가져옵니다. 내 이해는 그 목적은 클라이언트 측에서 사용하기위한 것입니다. javax.faces.component.UIComponent 클래스의 객체를 반환합니다. –

+1

getComponent 함수를 사용하려고 항상 불운했습니다. 이 경우 디버거는 필드를 OK로 번역했음을 보여 주었지만 필드에서 핸들을 얻으려는 문제로 다시 돌아 왔습니다. 다시 XSP.getElementById로 변경되었으며 챔피언처럼 작동합니다. 어쨌든, 은 제가 찾고있는 것입니다. 많은 감사! – cjames728