2014-02-05 1 views
0

내 XPages에 자바 스크립트 코드의 몇 가지 흥미로운 행동 건너 온

//'rdoGeschlecht1' is present on page Basis (no problems there), 
//but not on page 'Stufe1'.  
var level = "Stufe1"; 
if(level == "Basis") 
{ 
    alert("1"); 
// var rdoGeschlecht1 = '#{javascript:getClientId("rdoGeschlecht1")}'; 
} 
else if(level == "Stufe1") 
{ 
    alert("2"); 
} 
요소가 존재하지 않는 경우 페이지에 실행될 때 항상 위의 코드가 오류로 종료

- "getClientId의 모든 사용자가 사용할 수있는 구성 요소 이름이 없습니다." - 실제로 Notes가 실제 실행에서 사용되지 않더라도 주석을 제거하려고 시도하더라도 Notes가 객체 ID를 확인하려고합니다.

나는 &이라는 임시 해결책을 발견했다. 그러나 나는이 행동에 대해 비틀 거린 첫 번째 것이 아니며, 실제로 경험이 풍부한 XPages 프로그래머가이 문제에 대해 관심을 보일 것이라고 생각한다.

+0

[왜 내 페이지가 내 의견을 처리합니까?] (http://stackoverflow.com/questions/19679079/why-does-xpage-process-my-comments) SSJS 코드가 실행되는 것과 동일한 문제가 발생했습니다. 주석 처리 된 경우. # {또는 $ {SSJS 코드로 해석됩니다. –

+1

코딩 스타일 참고 : {}을 자신의 행에 넣으면 JavaScript 인터프리터에 추가 처리가 추가됩니다. 자바에서는 맛/스타일의 문제이지만 자바 스크립트에는 미묘하지만 실제 영향을 미칩니다. 습관을 바꾸고 조건문과 같은 줄에 넣고 싶을 수도 있습니다. – stwissel

답변

4

문제는 브라우저에서 실행될 클라이언트 측 JavaScript를 주석 처리하는 것입니다. 그러나 # {javascript : (서버에서 실행해야하는) 내의 서버 측 JavaScript 코드는 주석 처리되지 않습니다.

아마도 SSJS 나 EL을 문자열 속성 또는이 경우 스크립트 블록에 넣는 것이 무엇인지 설명하는 데 도움이 될 것입니다. CSJS가 서버에서 파싱되지 않는다는 것이 핵심이므로 브라우저로 문자열로 전달됩니다.

구문 분석기는 문자열을 읽고 # {javascript :}까지 찾아 다음 코드를 닫아야합니다}는 SSJS 파서에 전달되어야하며 결과는 브라우저에 쓰여지는 문자열에 추가됩니다. "//"로 시작하는 SSJS 블록 내의 모든 행은 생략됩니다. 하지만 파서는 # {javascript : 브라우저 외부로 전달되는 텍스트이기 때문에 # {javascript} 외부의 정보는 고려하지 않습니다. 모든 것을 클라이언트 측 JavaScript로 해석하는 브라우저입니다.

잘 작동하는 이유를 분명히 밝혀줬으면합니다.

SSJS가 포함 된 스크립트 블록에서 줄을 주석 처리하고 SSJS가 실행되지 않도록하려면 CSJS를 주석 처리해야합니다 (브라우저에서 실행하지 않도록). SSJS (그래서 서버가 그것을 실행하지 않습니다).