2012-03-04 3 views
2

내 템플릿에 데모 dijit 위젯을 포함하려고합니다. 그러나 나는 계속해서 "Dojo가 정의되지 않았다." 나는 대답을 찾으려고했지만 나는 할 수 없었다. 이 오류는 필요한 dojo.js가 실제로 브라우저에 의해로드 될 때 이상합니다. 작동하지 않는 무엇Dijit을 사용하려고 시도했지만 점점 : Dojo가 정의되지 않았습니다.

은 다음과 같습니다

dojo.require("dijit.form.MultiSelect"); 

그러나, 나는이 일을 다른 도장 모듈을 사용하는 경우 : 그것은 작동

require(["dojo/store/JsonRest" ... 

합니다. http://pastebin.com/9fm13pSP

답변

4

이 도장 1.7 :

나는 여기에 내 템플릿의 페이스트 빈을했다?

해당 버전의 경우 Dojo는 함수 define()require()을 전역 이름 공간에 정의해야한다고 생각합니다.

그런 다음이 함수는 도장 자체를 요구하는 데 사용됩니다. dojo.js에는 모든 라이브러리가있을 수 있지만 명시 적으로 require까지 사용할 수 없습니다.

<script> 
// Dojo 1.7 (AMD) 
require(["dojo"], function(dojo){ 

dojo.require("dijit.form.MultiSelect"); 
dojo.ready(function(){ 
     var sel = dojo.byId('dynamic'); 
     var n = 0; 
     for(var i in dijit){ 
       var c = dojo.doc.createElement('option'); 
       c.innerHTML = i; 
       c.value = n++; 
       sel.appendChild(c); 
     } 
     new dijit.form.MultiSelect({ name: 'dynamic' }, sel); 
}); 

}); 
</script> 
3

당신이 비동기로 도장 1.7을 포함하는 경우 폴 피부를 깨끗하게이 지적했듯이 : 사실 플래그 세트 (당신처럼)는 것이다

는 (도장 1.7.2을 사용하는) 나를 위해 일한 requiredefine 함수 만 전역 이름 공간에 노출 시키십시오. 이것은 최근 소개 된 AMD 모듈의 새로운 스타일로의 전환의 일부입니다. "비동기 : true"로

이제 그 작은을 추가하거나

  1. 로 선택할 수는

  2. 가 제거 코드 주위에 래퍼 "도장이 필요"플래그를 1.6

    으로 다시 호환성에 의존
  3. "dojo.require"를 사용하여 이전 동기 스타일 대신 새로운 1.7 AMD 비동기 모듈을 사용하도록 코드를 변환하십시오.

관련 문제