Почему мой пользовательский модуль недоступен после возникновения события YUILoader.onSuccess?
Пытаюсь лучше написать JavaScript, уууу!
Первый шаг для меня: загрузчик зависимостей YUILoader, так что весь мой пользовательский код доступен для использования в надежный момент времени.
Моя текущая среда:
- Путь к библиотеке YUI (2.8.1): C:\wamp\www\lib\js\yui\2\build\ (http://localhost/lib/js/yui/2/build/)
- Все минимальные, отладочные и сырые файлы YUI, расположенные выше
- Пользовательский путь к библиотеке: C:\wamp\www\lib\js\ (http://localhost/lib/js/)
- Пользовательский модуль 'fln-min.js' находится в вышеуказанном местоположении
- Тестирование в Chrome
Заметки:
Ниже мой пример HTML-страницы, мой пользовательский модуль следует HTML-коду. Никакого CSS или чего-то еще фанк, я просто хочу, чтобы это работало как доказательство концепции. Если вы запустите мой код, вы увидите, что оба события onSuccess срабатывают, но во вложенном обратном вызове данные равны нулю, и мой пользовательский модуль кажется недоступным. Я пробовал несколько вещей, таких как конкатенация путей, следовательно, "base" в первом экземпляре YUILoader и закомментированный второй "fullpath" во втором экземпляре YUILoader.
Демо HTML страница:
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>External file Loader</title>
<script src="/lib/js/yui/2/build/yuiloader/yuiloader-min.js"></script>
<script>
new YAHOO.util.YUILoader({
base: '/lib/js/yui/2/build/',
require: ['yahoo-dom-event'],
// require: ['yahoo-dom-event','reset-fonts-grids','container'],
// allowRollup: true,
// combine: true,
onSuccess: function() {
alert('YAHOO: '+YAHOO);
var loader = new YAHOO.util.YUILoader();
//
loader.addModule({
name:'FLN',
// varName:'FLN',
type:'js',
fullpath:'/lib/js/fln-min.js'
// fullpath:'../../../fln-min.js'
});
loader.onSuccess = function(o) {
//
alert('o.data: '+YAHOO.lang.dump(o.data));
alert('FLN: '+FLN);
//
};
loader.onFailure = function(o) {
//
alert('Error: '+YAHOO.lang.dump(o));
//
};
loader.insert();
}
}).insert();
</script>
</head>
<body>
<div id="output"></div>
</body>
</html>
Пользовательский модуль (fln-min.js):
var FLN = function(){
var _debug = false ;
var _masterDebug = false ;
return {
loaded: function(){ return true; }
}
}();
alert('...');
1 ответ
Правильный ответ был: new Loader()
В объекте конфигурации #1 отсутствовало имя ключа пользовательского модуля FLN
от его requires
массив.