2

我开始学习 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 帖子(示例),并将 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. 我可以通过将本地 jQuery 和 jQueryUI 库替换为基于 CDN 的库(如 Google 的库)来消除最后两个错误(如上图所示)。

我想知道如何从本地文件加载 jquery 和 jqueryUI 而无需获取Error: No define call for jqueryError: Load timeout for modules: jquery-ui.

如果这篇文章很长,我很抱歉。正如我上面提到的,我仍在学习 javascript,并尽我所能保持我的代码干净。如果任何有经验的编码人员可以帮助我回答上述任何问题,我将非常感谢您的帮助。谢谢你。

4

2 回答 2

1

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

从您的定义语句中删除 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

于 2013-07-14T01:48:31.917 回答
0

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

requirejs(["app/app"]);

scripts/loader.js. 这使得所有三个错误都消失了。

希望这个问题,当像我这样的另一个初学者遇到 requireJS 时,将很容易克服。

此外,如果您想直接从 @kadumel 建议的 requireJS 文档中了解更多信息,请阅读thisthisthis 。

于 2013-07-14T05:05:25.553 回答