【问题标题】:jQuery's getScript - including files into the main scope?jQuery 的 getScript - 将文件包含在主要范围内?
【发布时间】:2025-12-04 20:00:01
【问题描述】:

我想了很多关于如何在我的主干.js 应用程序中包含文件的问题。在生产中,我显然会加入我的文件并最小化它们以将请求保持在最低限度,但在开发过程中,最好只加载所有文件,而不必为每一个微小的变化调用构建脚本。

所以我看了一下jQuerygetScript()-方法。我试了一下,能够加载我的文件。

由于我已将 getScript-call 放入函数中,以确保在启动我的骨干网应用程序之前加载文件,因此加载的每个脚本似乎都不包含在全局范围内。

var loader = function () {
     var scripts = ['/app/routers/myrouter.js'];

     for (var i = 0; i < scripts.length; i++) {
         $.getScript(scripts[i], function () {});
     }

     console.log(myrouter); // Works - myrouter is a function
     init(); // Callback - we've loaded all scripts
 };

var init = function () {
    console.log(myrouter); // myrouter is undefined
};

$(document).ready(loader());

【问题讨论】:

  • 请让我知道您对这个问题的看法是否定的,而不是默默地投反对票。谢谢

标签: jquery backbone.js eval getscript


【解决方案1】:

首先,您只是调用loader() 而不是传递函数:

$(document).ready(loader);

会解决的

其次,您将立即调用init 回调,而不是在加载所有脚本时。如果有很多脚本你需要使用 Promise:

    var scripts = ['/app/routers/myrouter.js'];
    for (var i = 0; i < scripts.length; i++) {
        scripts[i] = $.getScript(scripts[i]);
    }


    $.when.apply( $, scripts ).then( init, function(){
        "some script failed";
    });

上面使用的语法是 $.when( promise1, promise2, ...).then( successCallback, failureCallback) - 我们用 Promise 填充数组并使用 .apply 将它们作为参数应用。

http://api.jquery.com/jQuery.when/

http://api.jquery.com/Deferred.then/

【讨论】: