为什么在YUILoader.onSuccess事件触发后我的自定义模块不可用?

时间:2010-10-14 02:05:12

标签: javascript html yui yui2

尝试编写更好的JavaScript,哇喔!

我的第一步:YUILoader依赖加载器,以便我可以在可靠的时间点使用我的所有自定义代码。

我目前的环境:

  • YUI(2.8.1)库路径:C:\ wamp \ www \ lib \ js \ yui \ 2 \ build \(http:// localhost / lib / js / yui / 2 / build /)
  • 位于上方位置的所有YUI min,调试和原始文件
  • 自定义库路径:C:\ wamp \ www \ lib \ js \(http:// localhost / lib / js /)
  • 自定义模块'fln-min.js'位于上方位置
  • 在Chrome中测试

备注:

下面是我的示例HTML页面,我的自定义模块遵循HTML代码。没有CSS或任何时髦的东西,我只想把它作为一个概念证明。如果你运行我的代码,你会发现两个onSuccess事件都会触发,但是嵌套的回调数据是null,而我的自定义模块似乎不可用。我尝试过一些东西,比如路径连接,因此第一个YUILoader实例中的'base',以及第二个YUILoader实例中注释掉的第二个'fullpath'。

演示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 :(得分:0)

正确答案是:new Loader()#1的配置对象缺少其FLN数组中的自定义模块密钥名称requires