2

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

所以我看了一下jQuery's getScript()-method。我试了一下,并能够加载我的文件。

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

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());
4

1 回答 1

6

首先,您只是调用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/

于 2012-01-21T14:29:44.600 回答