1

我正在开发一个基于小部件/小工具的网站,因为用户可以在屏幕上选择他/她想要的小部件/小工具。

这意味着我将拥有数百/数千个 js 文件,每个小部件/小工具 1 个。我认为我可以根据用户选择在需要时使用 $.getScript 加载正确的 js 文件。

我发现的问题是 $.getScript 只能通过 javascript 全局变量发送变量。全局变量和 $.getScript 似乎不能很好地结合在一起。

还有另一种方法吗?即以某种方式仅根据用户选择在需要时加载js文件,其中加载的js文件可以从调用子js文件的js文件中接收变量?

4

3 回答 3

3

这个问题的解决方案是使用像require.js这样的模块加载器系统。

它会根据每个名为依赖项的文件自动知道要加载哪些文件。

您的模块将清楚地概述它们的依赖关系,如下所示:

require(["helper/util"], function(util) {
    //This function is called when scripts/helper/util.js is loaded.
    //If util.js calls define(), then this function is not fired until
    //util's dependencies have loaded, and the util argument will hold
    //the module value for "helper/util".
});

一旦他们完成了 require.js 加载器将自动为您加载正确的 JS 文件。这有点不同的语法,但它会解决问题。

于 2012-12-10T16:14:30.820 回答
3

我发现的问题是 $.getScript 只能通过 javascript 全局变量发送变量。全局变量和 $.getScript 似乎不能很好地结合在一起。

通过加载的脚本$.getScript可以很好地访问全局变量。(并不是说全局变量是个好主意。)

但是将信息传递给加载的脚本的另一种方法是让每个脚本根据脚本名称实现加载后回调,并且让加载器代码调用该回调(使用要传递给它的参数)$.getScript一次它的东西。

实例| 资源

当然,该示例也使用了全局变量——$对于 jQuery,新脚本的theNewScript加载完成函数是全局变量。在生产系统中,要做到这一点,我的整个应用程序只有一个全局变量(例如,MyApp),在一个作用域函数中定义我的所有代码以避免创建任何其他全局变量,并让新脚本设置它“加载完成”功能作为其属性。(通常我根本不定义任何全局变量,因为我通常不要求加载脚本。)

于 2012-12-10T16:13:51.617 回答
0

尝试使用纯 javascript 调用您的脚本

        var html_doc = document.getElementsByTagName('head')[0];
        js = document.createElement('script');
        js.setAttribute('type', 'text/javascript');
        js.setAttribute('src', '../scripts/jquery-1.7.2.min.js');
        html_doc.appendChild(js);
        js.onreadystatechange = function () {
            if (js.readyState == 'loaded' || js.readyState == 'complete') {
                doSomething
            }
        }

        //works on ff e no chrome
        js.onload = function () { doSomething }
于 2012-12-10T18:38:02.760 回答