2010-01-08 2 views
0

내 dojo.byId가 스크립트 라이브러리 내에서 작동하지 않는 이유는 무엇입니까?

다음 코드로 dojo.addOnLoad에 전달 된 함수를 포함하여 dojo 코드가 포함 된 웹 페이지가 있습니다.

laborDetailHandler.RevenueTotalInput = dojo.byId('#{id:LaborRevenueTotal}'); 
if (!laborDetailHandler.RevenueTotalInput) { 
console.warn('RevenueTotalInput not found.') 
} 

이 코드가 인라인 인 경우 LaborRevenueTotal 입력 상자 위에 있더라도 작동합니다 .

이 코드를 스크립트 라이브러리로 옮기면 'RevenueTotalInput not found'가 표시됩니다. dojo.addOnLoad는 함수를 받고 실행하지만 어떤 이유로 함수가 작동하지 않는다는 메시지를 보냅니다.

난 완전히 여기저기서 난처 해. 누구든지 아이디어가 있습니까?

+0

업데이트 : 입력 필드 html은 다음과 같습니다.

+0

'스크립트 라이브러리로 이동'한다는 것은 정확히 무엇을 의미합니까? # {...} 표현식을 대체하는 서버 측 코드가 있습니까? – peller

답변

0

사과드립니다. 나는 이것이 dojo 질문이라고 생각했다; 대신 Lotus Notes XPages 관련 질문이었습니다! 나는 아직도 이런 일이 벌어지고 있는지 확신 할 수 없지만 누군가가 corroborated the that problem is larger than my script을 가지고 그것을 해결하는 방법을 알고있다.

내 해결 방법은 스크립트 라이브러리 내에서 이러한 요소를 찾지 않고 필요한 요소에 대한 핸들을 가져 와서 스크립트 라이브러리 내에서 초기화 함수에 전달하는 것입니다.

응답 해 주셔서 대단히 감사합니다. 제 질문은 나빴습니다.

1

'# {...}'표현식은 SSJS 라이브러리 내에서 작동하지 않으며 XPage 또는 사용자 정의 컨트롤의 소스에서만 작동합니다.

해결 방법 : 다른 곳에 (예 : 텍스트 필드) # {} 절을 사용하고 클라이언트 측 스크립트에서 참조하십시오.

0

스크립트 라이브러리는 XPage에서 컴파일되지 않지만, 또한 인라인으로 실행되지 않습니다.

XPages의 모범 사례는 스크립트 라이브러리에서 블랙 박스 방식을 사용하고 있습니다. 스크립트 라이브러리에 정의 된 모든 함수에 대해 매개 변수화를 사용하십시오 (서버 측 및 클라이언트 측 모두에 유효 함).

SSJS에서는 getComponent를 사용하여 구성 요소 객체를 가져올 수 있지만 client-id를 배울 수 있으므로 스크립트 라이브러리의 재사용 가능성이 줄어 듭니다. XSP 코드를 깨끗하게 유지하는 데 사용하면 좋습니다. SSJS를 디버깅 할 때 골머리를 앓므로 오류 트랩 (try/catch)을 사용해야합니다.

0

코드를 XPage의 속성이나 이벤트에 넣으면 String과 Evaluator를 통해 코드가 전달됩니다. 패키지 탐색기보기에서 XPage 용으로 작성된 Java 클래스를 보면, 내 뜻을 알 수 있습니다. 코드는 페이지로드시 또는 런타임에이를 평가하는 Java 함수에 전달되는 String입니다.

# {id : myField}가 계산되지 않으므로 스크립트 라이브러리의 코드가 평가자를 거치지 않는다고 생각합니다. 또한 렌더링 된 HTML 페이지에서 을 식별하는 컨텍스트의 문제점이 있습니다.

두 가지 방법이 있습니다. 하나는 XPage 이벤트에서 ID를 SSJS/CSJS 기능에 전달하는 것입니다. CSJS의 다른 옵션은 dojo.query를 사용하는 것입니다.

관련 문제