2011-08-24 3 views
1

최근에 dojo에서 작업하기 시작했습니다. dijit.byId()는 dojo.onLoad() 내부에이 호출을 넣더라도 undefined를 반환합니다.dijit.byId()는 dojo.addOnLoad()에서도 undefined를 반환합니다.

<script type="text/javascript"> 
dojo.require("dijit.form.Select"); 
function myhandler(ev) 
{ 
    var mydiv = dojo.byId('mydivid'); 
    if (ev == 'Disable') { 
     mydiv.style.display = 'none'; 
    } else { 
     mydiv.style.display = 'block'; 
    } 
} 
function regHandler() 
{ 
    var item = dijit.byId("myState"); 
    alert(item);//shows undefined 
    dojo.connect(dijit.byId("myState"), 'onChange', myhandler); 
} 
dojo.addOnLoad(regHandler); 
</script> 

<select input class="dialogInputElement" dojoAttachPoint="myState" dojoType=dijit.form.Select name="myState" id="myState" value='Enable' style="margin-bottom:5px"> 
<option value="Enable">Enable</option> 
<option value="Disable">Disable</option> 
</select> 

dijit.byId() 호출을 setTimeout()으로 지연하면 정상적으로 작동합니다. dojo 버전은 1.4.2입니다. 모든 해결 방법이나 해결 방법을 알려드립니다.

미리 감사드립니다.

+0

Dojo의 onLoad 이벤트가 dijits가 구문 분석되고 인스턴스화되었다는 것을 보장하지 못하기 때문에 'dijit.byId'에서 사용할 수 있습니다. dojoConfig에서'parseOnLoad : true'를 가지고 있습니까? 'dojo.parser.parse();'를'regHandler'에 추가하면 (코드 나머지 부분 이전에) 어떻게됩니까? – Frode

답변

4

코드에서 그대로 사용하면 dojoType 선언문에서 큰 따옴표가 누락 된 것처럼 보입니다. 입력 한 내용이 dijit 위젯으로 선언되지 않으면 dijit.byId()으로 검색 할 수 없습니다.

보다 일반적인 노드 선택기를 사용하려는 경우 대신 dojo.byId()을 사용하면 dijit 위젯뿐만 아니라 id가있는 노드를 선택합니다.

+0

항상 HTML 특성 주위에 이중 큐트를 넣는 것을 잊지 마십시오. – hugomg

+0

@ Ryan 나는 따옴표로도 시도했지만, 아무런 차이가 없었습니다. dojo.byId(), html 요소를 반환합니다. dojo.connect()를 호출 할 때 사용할 수 있습니까? – user469635

+0

@missingno 따옴표와 함께 또는 따옴표없이, 내가 아래와 같이 지연을 추가하면 작동합니다 :'function regHandler() { var item = dijit.byId ("myState"); alert (item); // 정의되지 않음을 나타냅니다. dojo.connect (dijit.byId ("myState"), 'onChange', myhandler); } 함수 myshim() { setTimeout ("regHandler()", 1000); } dojo.addOnLoad (myshim); '하지만 지연없이 작동하고 싶습니다. – user469635

2

djConfig = "parseOnLoad : true"속성을 도우 츠 구성에 추가하려고 시도 했습니까?

당신이 dojo.js 라이브러리 파일이 같은 속성을 설정할 수 있습니다 포함

: 내 테스트에서

<script type="text/javascript" src="dojo/dojo.js" 
     djConfig="parseOnLoad: true"> 
</script> 

,이 문제를 해결하는 것 같다. 이 jsfiddle 참고 (왼쪽 탐색 모음에서 djconfig 태그 속성을 제거하고 실행하면 설명하는 동작을 얻게됩니다.

+0

Duh! 어떻게 내가 이것을 잊을 수 있었 을까? 물론 dojo에 확장 된 HTML을 구문 분석하도록 알려야합니다. –

+0

@BuffaloBuffalo 위대한 링크 (jsfiddle)에 감사드립니다. – user469635

관련 문제