2013-01-11 1 views
1

나는 많은 질문이 주제에 대해 포럼에 있다는 것을 알고 있지만 나는 아직도 답을 찾을 수없는에서 Dojo 위젯을 사용하여 ...로드 및 jQuery를

나는 jQuery를 기반으로 JS 응용 프로그램이 있습니다. 이제 Dojo 기반의 일부 위젯을 일부 통합해야합니다. Dojo와 위젯을 필요할 때만로드하려고하므로 비동기 적으로이 작업을 수행하려고합니다. Dojo가 내 사이트에 저장되어 있으므로 내 공간에서로드하십시오. 내가 비동기 요청에 필요한 dojo.require("dojo.io.script");를 호출 할 때

$.getScript("/Content/3rd/dojo/dojo/dojo.js") 
.done(function (script, textStatus) { 
    dojo.ready(function() { 
     dojo.require("dojo.io.script"); 

     alert('Dojo ready!') 
    }); 
}) 
.fail(function (jqxhr, settings, exception) { 
    alert('error!'); 
}); 

내 문제

처음부터 시작하고 나는 그것이 도장을로드하려고 볼 : 여기

내가 jQuery를에 사용하려고하는 코드입니다 .io.script를 다음 URL에서 가져옵니다. '/Example/io/script.js'와 정확히 일치하지 않습니다. 나는 어떤 구성 문제를 놓쳤다 고 생각 하나, 어느 것이 ... 누군가 내가 그것을 해결하도록 도울 수 있습니까?

어쩌면 그것은 사소한 질문입니다하지만 난 미꾸라지와 함께 일한 적이 그냥 도장, jQuery를에 MYY 기본 응용 프로그램을 기반으로 위젯과 빠른 통합을 할 필요가 ...

해결책 :

그냥 경우 누군가가 관심이 있다면, 나는 위젯을로드하는 다음 스크립트를 사용 :

// Load Dojo and scripts for JSDraw2 asyncronously 
dojoConfig = { 
    baseUrl: "/Content/3rd/dojo-1.8.3/dojo" 
}; 

$.getScript("/Content/3rd/dojo-1.8.3/dojo/dojo.js") 
.done(function (script, textStatus) { 
    dojo.ready(function() { 
     dojo.require("dojo.io.script"); 

     var deferred = dojo.io.script.get({ url: "/Content/3rd/JSDraw2.1.4/JSDraw2.js" }); 
     deferred.then(function() { 
      // init the Dojo widget... 
      oThis.jsDraw = new JSDraw(oThis.element.get(0)); 
     }, function() { 
      alert('Cannot load Scilligence.JSDraw2.js'); 
     }); 
    }); 
}) 
.fail(function (jqxhr, settings, exception) { 
    alert('Cannot load Dojo.js'); 
}); 

답변

1

그것으로 가기 위해 configuration 필요하며, 이것은 전에로드 할 필요가 도장을 사용하여 음 dojo.js 스크립트를 가져온다.

Dojo docs은 설정을 색인 파일 (또는 동급) 헤드에 넣는 것이 좋지만, dojo 코드를 풀기 전에 작성할 수 있다고 생각한다. 그것을 필요합니다.

아마도 dojo.js를 가져 오기 전에 "dojoConfig"라는 전역 변수를 작성하십시오. 오래 전부터 웹 앱에서 사용했던 설정 예가 있습니다 만, 왜, 왜, 그리고 무엇을 위해, 그리고 dojo가 언제, 어떤 일을하는지에 대한 의견을 나누기 위해 읽는 것이 좋습니다. dojo starthello dojo 튜토리얼을 최소한 읽은 다음 configwidget based 튜토리얼을 통해 이동하는 것이 좋습니다. Dojo에서 AMD principles을 사용하는 방법에 관해 읽어 볼 수 있습니다.

<script> 
    var dojoConfig = { 
     baseUrl: "./",//this is where dojo will lok from for all locations configured 
     async: true, 
     isDebug: false, 
     parseOnLoad: false,//false to allow for us to call this independently in js later on 

     //here are the packages dojo will be aware of and related js files 
     packages: [ 
      //dojo specific packages 
      {name: "dojo", location: "libs/dojo/1.8.1/dojo", main: "dojo.js.uncompressed.js"}, //dojo.js.uncompressed.js for dev, use dojo.js for release 
      {name: "dijit", location: "libs/dojo/1.8.1/dijit"}, 
      {name: "dojox", location: "libs/dojo/1.8.1/dojox", main: "dojo.js"} 
     ] 
    }; 
</script> 

내 설정은 DojoX는과는 Dijit을 포함하지만, 물론 당신은 그럼 그냥 그 라인을 제거를 필요가없는 경우. 당신이 dojo widget을 언급했지만 dijit은 dojo가 "widget power"를 얻는 곳입니다.

도우의 고유 위치와 위치와 마찬가지로 config의 기본 URL을 변경해야합니다. 이 속성 및 기타 속성에 대한 자세한 내용은 dojo config tutorial을 참조하십시오.

위의 링크가 많아 죄송합니다. 특히 모듈을 사용하여 작업 할 때 dojo 1.8은 훌륭한 프레임 워크이며, 의도 한대로 사용하기 시작하는 학습 곡선이 필요합니다. 전에 게임에서 늦게 도장을로드하려고 시도한 적이 없으므로 정직하게 생각하는 방법을 듣고 싶습니다.

어쨌든 행운을 비네.

+0

답변 주셔서 감사합니다. Jez! 내가 config와 문제를 알아낼 수 있었고 이제 'dojo.io.script'를로드 할 수 있습니다.더 나아가 dojo 위젯을 종속성으로로드 할 수있었습니다. –

+0

기꺼이 도와 드리겠습니다. – Jeremy