Почему мой пользовательский модуль недоступен после возникновения события 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 массив.

Другие вопросы по тегам