2013-10-08 5 views
0

이 함수에는 일부 함수 (예 : x.js)가 들어있는 js 파일이 있습니다.dojo 코드에 javascript 함수를 포함하십시오.

다른 파일에서 x.js의 함수를 다시 사용해야하므로 동일한 함수를 두 번 쓰지 않습니다. "dojo/request/script"를 시도했지만 작동하지 않습니다.

이러한 기능을 가져 오는 방법에 대한 제안 사항이 있습니까?

답변

2

이상적으로 파일을 AMD 모듈로 만들어야합니다. 예를 들어, my/AB.js이 포함되어있는 경우 : 다른 자바 스크립트 파일 (들), 당신이 그것을로드 require을 사용할 수 있습니다에,

define([], function() { 
    return { 
    f1: function(x) { /*..*/ }, 
    f2: function(y) { /*..*/ } 
    } 
}); 

다음 :

function f1(x) { /*..*/ } 
function f2(y) { /*..*/ } 

당신은 그것을 다시 작성해야합니다. 그들은 다른 사람의 기능과 충돌하지 않습니다 즉

require(['my/AB'], function(AB) { 
    AB.f1('foo'); 
    AB.f2('bar'); 
}); 

(my/AB에는 .js 확장이 없다는 것을 주의는!)

이, AB.js에서 기능을 전역에 더 이상 이익이있다 . 또한 Dojo 빌드 시스템을 사용하여 나중에 최적화 된 결합 파일을 배치 할 수 있습니다.

그러나 항상 가능한 것은 아닙니다. 아마도 다른 JS 파일은 f1f2을 전역 범위에두고 있습니다. 그러나 .js 확장자를 추가하여 Dojo의 로더가 포함 된 정규 파일이 아닌 AMD를로드 할 수도 있습니다. 모든 경우에, 당신의 코드를 가정 한 것으로

require(['my/AB.js'], function() { 
    window.f1('foo'); 
    window.f2('bar'); 
}); 

참고 my라는 디렉토리에 있습니다. 실제 디렉토리가 호출 되더라도 dojoConfig에서 Dojo 로더에 대해 알려줘야합니다.

<script type="text/javascript"> 
    var dojoConfig = { 
    baseUrl: ".....", 
    // your other config parameters, 
    packages: [ 'my', '../folder/relative/to/baseUrl/my' ] 
    }; 
</script> 
<!-- your inclusion of dojo.js somewhere below this --> 

PS : 당신은 실제로 너무 임의의 위치에서 JS 파일을로드 할 수

require(['http://example.com/js/my/AB.js'], function() { 
    window.f1('foo'); 
    window.f2('bar'); 
}); 
+0

완벽. Frode에게 많은 도움을 주셔서 감사합니다. – Tarek

관련 문제