自动加载Javascript

时间:2014-01-20 23:26:19

标签: javascript jquery autoloader

我有一个有趣的概念,我正在研究和查看,通过自动加载JavaScript的各种堆栈问题。我想使用第三方工具,除了表单jquery,所以我想我会自己角色。我的概念是:

var scripts = {
    'name' : 'path/to/script_dir/' // Load all scripts in this file.
}

requireScripts(scripts); // Requires all scripts
// Call your classes, methods, objects and so on ....

requireScript()函数的作用类似于:

function requireScript(hash){
   $.each(hash, function(key, value)){
       $.ajax({
           url: value,
           dataType: "script",
           async: false,
           error: function () {
               throw new Error("Could not load script " + script);
           }

        });
    });
 }

注意:以上只是一个概念,我认为它不会起作用。

以上将允许您加载SPECIFIC脚本。所以实质上你的哈希键值是'name' : 'path/to/specific/script'。这个问题是你的哈希会变得相当大......

我遇到的另一个问题是,如果我将其简化为“php pear命名标准”,那么,正如趋势似乎是 - 我们将创建一个类,它将以其位置命名:

var some_folder_name_class = function(){}

自动加载器会将其翻译为:some/folder/name/class.js,然后以这种方式加载。

通过滚动我自己的“require”方法,有两种方法可以加载我正在查看的javascript文件。一个是通过上面实现的哈希思想加载javascript文件的目录。 (所提供的代码样本将如何更改和修复此哈希值。我不认为它甚至可以加载单个文件)

让你这么做:

new some_class_name()并且有一个全局函数侦听新单词,根据类的名称找到你试图调用的文件并加载它,这个你永远不必担心 - 只要你按照文件将在你的js文件的类和文件夹结构中加入“pear命名标准”。

可以采取任何一种方法吗?还是我梦想成真?

我看到很多框架都做了很多require('/path/to/script'),如果我可以让我自己的自动加载器角色允许我加载一个js文件的目录,甚至可以让它在它监听{{1}的地方在课堂实例化之前,我可以让我的生活更轻松。

2 个答案:

答案 0 :(得分:2)

您是否考虑使用requirejs并可能使用Lazy加载。

http://www.joezimjs.com/javascript/lazy-loading-javascript-with-requirejs/

以下是示例版本:

  1. 您可以下载here

  2. 示例基于此文件夹结构:

    公共

    • 的index.html
    • 脚本

      • app.js
      • LIB

        ** jquery-1.10.2.js

        ** require.js

  3. 3。来自代码:

    <强> HTML

    `<!DOCTYPE html><html>
     <head><title>Sample Test</title>`
    

    <script src="scripts/lib/require.js"></script> <!-- downloaded from link provide above--> <script src="scripts/app.js"></script></head>

    `<body><h1>My Sample Project</h1><div id="someDiv"></div></body></html>`
    

    应用程序配置app.js

    requirejs.config({
        baseUrl: 'scripts',
    
        paths: {
            app: 'app',
            jquery: 'lib/jquery-1.10.2' //your libraries/modules definitions
        }
    });
    
    // Start the main app logic. loading jquery module
    require(['jquery'], function ($) {
            $(document).on('ready',function(){
                $('#someDiv').html('Hello World');
            });
     });
    

答案 1 :(得分:2)

仅限jQuery选项

如果您正在寻找仅限jQuery的解决方案,请查看jQuery.getScript()。它将是处理问题的脚本加载部分的一个很好的候选者。然后你可以在它周围编写一个非常小的包装器来加载所有的脚本 - 就像你上面写的那样:

var loadScripts = function(scripts) {
  $.each(scripts, function(name, path) {
    jQuery.getScript("/root/path/" + path + ".js");
  })
}

如果您对此方法的更多信息感兴趣,请访问David Walsh read this article

其他伟大的图书馆

我强烈建议您查看当前批量的脚本加载库。我想你会对那里的东西感到惊喜。此外,他们还拥有出色的社区支持和文档。 RequireJS似乎是领跑者,但David Walsh在curl.jsLABjs上发表了很多文章。