JavaScript文件和Modernizr/yepnope的结构

Structure of JavaScript files and Modernizr/yepnope

本文关键字:yepnope 结构 Modernizr 文件 JavaScript      更新时间:2023-10-06

我正在研究Modernizr和yepnope.js的整个异步脚本加载过程,我想知道如何调整应用程序的结构以使用异步脚本加载。

现在的结构类似于:

...
<head>
    <script src=jquery.js></script>
    <script src=plugin1.js></script>
    <script src=plugin2.js></script>
    <script src=plugin3.js></script>
    <script src=global.js></script>
</head>
<body>

此代码位于header.php文件中,该文件在整个应用程序中为required。在文档正文部分(其他PHP文件),我可能有一些JavaScript文件,如下所示:

    ...
    <script src=moduleA.js></script>
    <script src=someScripts.js></script>
</html>

以下是moduleA.js和someScripts.js可能包含的内容的简化示例:

$(document).ready(function() {
     $('.searchDate').myCoolPlugin({ /* some options */ });
});

还有一些Script.js:

$(document).ready(function() {
     $('#departureDate, #arrivalDate').myCoolPlugin({ /* some options */ });
});

如果我使用的是Modernizr,我会在页面顶部删除其他插件脚本,在global.js中我会写:

Modernizr.load([
    {
        test: $.fn.myCoolPlugin,
        nope: 'plugin1.js',
        complete: function() {
            $(document).ready(function() {
                $('.filterDates').myCoolPlugin();
            }
        }
    }
]);

如何保证myCoolPlugin已在moduleA.js和someScripts.js执行时加载?我意识到我可以用Modernizr.load()将插件初始化封装在这些文件中,但这似乎是不必要的代码重复。

如果我正确理解了你的问题,那么你想在用Modernizr加载了必要的脚本后执行主体脚本。

你可以这样做:

// Header script
var race_won = false;
var load_body_script = function() {
  race_won = true;
};
Modernizr.load([
    {
        test: ..your condition..,
        yep: ..test success..,
        nope: ..test fail..,
        complete: function() {
            $(document).ready(function() {
                $('.filterDates').myCoolPlugin();
                load_body_script();
            }
        }
    }
]);
// Body script
var body_script = function() {
  // .. your code here ..
}
if (race_won) {
  body_script();
}
else {
  load_body_script = body_script;
}