우리는 YUI3 로더를 사용하여 javascript 및 css 파일로드를 관리합니다. 각 페이지에 부트 스트랩 JS 코드의 일환으로, 우리는 다음과 같은 것이있다 :YUI 모듈을 지정할 때 YUI.add가 필요한 이유와 YUI 이외의 모듈이 작동하는 방법이 필요한지 알고 싶습니다.
YUI.add('my-module', function (Y) {
Y.MyModule = function() {
...
_validator: Y.Lang.isString
};
}, '3.4.0', {
requires: [ "yui-base" ]
});
YUI도 here을 로더가 될 수 있다는 주장 :
YUI({
...
groups: {
...
myGroup: {
modules: {
"my-module": {
...
path: "MyModule.js",
requires: [ "yui-base" ]
},
}
...
}
}
}).use("my-module", function (Y) {
Y.MyModule.doStuff();
});
MyModule.js을 다음과 같은 뭔가가 구성에 종속성이 지정되어 있으면 YUI3이 아닌 "모듈"과 함께 사용됩니다.
yui2: {
combine: true,
base: 'http://yui.yahooapis.com/2.8.0r4/build/',
comboBase: 'http://yui.yahooapis.com/combo?',
root: '2.8.0r4/build/',
modules: { // one or more external modules that can be loaded along side of YUI
yui2_yde: {
path: "yahoo-dom-event/yahoo-dom-event.js"
},
yui2_anim: {
path: "animation/animation.js",
requires: ['yui2_yde']
}
}
}
이 유이로드하고 실행했다로드 만 야후-DOM-event.js 후 YUI2의 animation.js을 실행 똑똑 제안 : 그들은 yui2 그룹에 대한 다음 예제 모듈 구성을 제공합니다.
내가 이해할 수없는 것은 이것이 YUI 이외의 모듈에서 작동하는 경우 YUI.add를 사용하여 내 모듈을 포장해야하고 중복이 필요하다는 것입니다 (요구 사항 또한 구성에 지정되어 있기 때문에).
추가 래퍼를 삭제하려고 시도했지만 (페이지가 (function (Y) { /* module content */ })(YUI);
으로 바뀜) 페이지로드시 js 오류가 발생합니다. Y.Lang은 정의되지 않았습니다. 따라서 wrapping add() 호출을하지 않아도 Y.Lang이 정의 된 기본 yui 스크립트 전에 스크립트가 실행되고있는 것으로 보입니다. 그러나 그렇다면 YUI가 아닌 모듈 (YUI.add()를 호출하지 않음)에서 문제가되지 않습니까?
그렇다면 샌드 박스 모듈을 사용하려면 add()가 필요한 이유는 추가 콜백이 동 기적으로 호출되지 않으므로 초기 스크립트 실행 중에 Lang과 같은 모듈을 동 기적으로 사용하려고하면 그것은 아직 정의되지 않았을 것입니다. – ChaseMedallion
정확히! 기본적으로,'YUI.add()'는 YUI의 전역 레지스트리에 지정된 이름으로 모듈 콜백을 등록합니다. 'YUI(). use()'는 전달한 모듈 이름 목록을 가져 와서 생성 한 샌드 박스 (콜백의'Y' 매개 변수)에 첨부합니다. –