Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/jquery/85.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/bash/18.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
动态加载脚本时,结构化javascript并延迟执行_Javascript_Jquery_Modernizr - Fatal编程技术网

动态加载脚本时,结构化javascript并延迟执行

动态加载脚本时,结构化javascript并延迟执行,javascript,jquery,modernizr,Javascript,Jquery,Modernizr,我正在使用modernizer.load()加载我的javascript文件。现在让我们假设每个页面都需要在加载完成后调用自己的init方法。但是我将加载放在模板主控中,它不知道子页面。页面如何知道依赖项何时完成加载 脚本 Page1Stuff= { init: function(){ alert('page 1 executed'); } } Page2Stuff= { init: function(){ alert('page 2 executed'); } } 站点主模板 /

我正在使用
modernizer.load()
加载我的javascript文件。现在让我们假设每个页面都需要在加载完成后调用自己的init方法。但是我将加载放在模板主控中,它不知道子页面。页面如何知道依赖项何时完成加载

脚本

Page1Stuff= {
   init: function(){ alert('page 1 executed'); }
}
Page2Stuff= {
   init: function(){ alert('page 2 executed'); }
}
站点主模板

//Modernizr loads the script.
Modernizr.load([{
    load: 'jquery.js',
},
{
    load: 'script.js'
}]);
第1页

$(function() {
    Page1Stuff.init();
});
第2页

$(function() {
    Page2Stuff.init();
});

我想我看到了两个问题。如果Modernizer仍在加载jquery,则可能未定义$。另外,
Page2Stuff
Page1Stuff
可能未定义。

在模板中:使用modernizer“complete”回调发出自定义事件以表示加载已完成,还可以设置一个全局变量,表示脚本已加载

在页面脚本中:首先检查全局变量以查看是否已加载所有脚本,如果未加载,请注册一个处理程序以侦听加载完成时发出的自定义事件

在模板代码中:

// A simple object that calls its listeners when modernizer script loading completes.
global_scriptLoadingMonitor = (function() {
   var listeners = [];
   var isComplete = false;
   return {
      "addListener": function (listener) {
         listeners[listeners.length] = listener;
      },
      "complete": function () {
         isComplete = true;
         for (var i = listeners.length - 1; i >= 0; i--) {
            listeners[i]();
         }
      },
      "isComplete": isComplete
   }
})();

Modernizr.load([{
    load: 'jquery.js',
},
{
    load: 'script.js'
    complete: function () {
    {
       global_scriptLoadingMonitor.complete();
    }
}]);
现在在第1页中,执行以下操作:

if (global_scriptLoadingMonitor.isComplete) {
    $(function() {
        Page1Stuff.init();
    });
} else {
    global_scriptLoadingMonitor.addListener(function() {
        $(function() {
           Page1Stuff.init();
        });
    });
}

第2页也是如此。

检查“完成”callback@spacevillain,我知道这一点,但如何让我所有的
页面
知道这一点呢?检查Modernizer对象,它可能存储加载的内容(如果没有,您可以自己创建简单的json)。所以,在每个“页面”上检查它,若并没有找到需要的东西,请让Modernizer加载它。你们能给我一个为事件向listn注册处理程序的例子吗?