Почему мой пользовательский модуль недоступен после возникновения события YUILoader.onSuccess? - PullRequest
1 голос
/ 14 октября 2010

Попытка лучше написать 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 и commeВыделил 2-й «полный путь» во 2-м экземпляре 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 Ответ

0 голосов
/ 30 ноября 2010

Правильный ответ: * В конфигурационном объекте new Loader() # 1 отсутствует имя ключа пользовательского модуля FLN из массива requires.

...