jQuery 的 getScript - 将文件包含到主范围中?

标签 jquery backbone.js eval getscript

我对于如何在我的backbone.js 应用程序中包含文件进行了很多思考。在生产中,我显然会加入我的文件并最小化它们以将请求保持在最低限度,但在开发过程中,最好只加载所有文件,而不必为每个小更改调用构建脚本。

所以我研究了 jQuerygetScript() 方法。我尝试了一下并能够加载我的文件。

由于我已将 getScript 调用放入函数中,以确保在启动backbone.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());

最佳答案

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

关于jQuery 的 getScript - 将文件包含到主范围中?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8953620/

相关文章:

javascript - Backbone : remove ellipsis onclick

Ruby:按名称设置全局变量

perl - block 评估的替代方案?

eval - Tcl:如何评估语句以在调用时填写默认参数

javascript - 尝试仅针对选中的行通过基于 $(this) 元素和 jQuery 的元素进行迭代

jquery - 按钮点击事件无响应

javascript - 为什么我收到错误 : ".isValid()" is not a function?

jquery - 将标记映射为 Backbone.js View

javascript - 使用 css-transitions 淡入然后在一段时间后淡出

javascript - 将 bootstrap 多选值拆分为多个变量