通过RequireJS加载本地jQuery,jQuery UI和其他文件

时间:2013-07-14 00:05:34

标签: javascript jquery jquery-ui requirejs

我开始学习javascript / jQuery并想使用RequireJS。以下是我的文件层次结构:

my_project/
├── index.php
└── scripts/
    ├── require.js
    ├── loader.js
    ├── app/
    │   ├── app.js  // this is where I'd like to write functions for the app
    │   └── helper/ // this folder is empty for now
    └── lib/
        ├── jquery/
        │    └── 1.10.2/
        │        └── jquery.min.js
        └── jqueryui/
            └── 1.10.3/
                └── jquery-ui.min.js

我阅读了与此相关的RequireJS文档和StackOverflow帖子(example),并将RequireJS配置设置为这样 -

my_project/index.php,我有

<script data-main="scripts/loader.js" src="scripts/require.js"></script>

scripts/loader.js,我有

requirejs.config({
    baseUrl: 'scripts/lib',

    enforceDefine: true,

    paths: {
        "app": '../app', // mapping for my 'scripts/app/' directory
        "jquery": [
            'jquery/1.10.2/jquery.min',
            //'//ajax.googleapis.com/ajax/libs/jquery/1.10.2/jquery.min', this works
                ],
        "jquery-ui": [
            'jqueryui/1.10.3/jquery-ui.min',
            //'//ajax.googleapis.com/ajax/libs/jqueryui/1.10.3/jquery-ui.min', this works
                ],
},

    shim: {
        "jquery-ui": {
            exports: "$",
            deps: ["jquery"],
        },
    },
});

scripts/app/app.js,我有

define(['jquery-ui'], function () {
    .... // some js code here
}

每当我测试index.php时,我都会看到(在Firebug控制台中)Error: No define call for loaderError: No define call for jqueryError: Load timeout for modules: jquery-ui。我可以通过使用基于CDN的本地jQuery和jQueryUI库来消除最后两个错误,如谷歌(如上所示)。

我想知道如何从本地文件加载jquery和jqueryUI,而不是Error: No define call for jqueryError: Load timeout for modules: jquery-ui

如果这篇帖子很长,我很抱歉。正如我上面提到的,我仍然在学习javascript,我正在努力保持我的代码干净。如果有经验的编码员可以帮助我回答上述任何问题,我将非常感谢您的帮助。谢谢。

2 个答案:

答案 0 :(得分:1)

在定义调用中,您需要为任何加载的JavaScript指定名称。您已经填充了jQueryUI,因此您不需要在PHP文件中再次定义它。

从您的define语句中删除jquery-ui并将其留空。如果你想要加载另一个JavaScript文件(比方说例如session.js)你会说

define(['app/session'], function (session) {

要加载它,然后使用session.whatever()来引用它。

下载jQuery -

您似乎已重命名了jQuery文件并更改了其命名约定。默认情况下,jQuery会被命名为jQuery-1.9.2.min.js或者其他东西,但在你的例子中,你可以在lib / jQuery / 1.9.2 / jQuery.min.js下找到它。我建议删除你编辑过的所有jQuery文件并在lib下读取它,然后设置你的require.js配置默认方式。不要试图重新发明轮子为什么要学习新技术!

请参阅设置信息的文档

http://requirejs.org/docs/jquery.html

答案 1 :(得分:0)

原来我得到了那些装载程序错误,因为我错过了

requirejs(["app/app"]);
scripts/loader.js中的

。这使得所有三个错误都消失了。

希望这个问题,当面对另一个初学者要求像我一样的时候,将很容易克服。

另外,如果您想直接从requireJS文档中了解更多内容,请阅读thisthisthis in general