8

我下载了最新版本示例项目。他们的文档暗示任何加载的内容都会传递到相关函数的参数列表中(以相应的顺序)。RequireJS

所以我决定尝试一下……但它似乎不起作用!

  • Firebug(net tab) 显示jQuery为正在加载:所以RequireJSobvioulsy 成功地完成了该部分
  • Firebug(控制台选项卡)显示“$ 不是函数”

我的问题是:为什么没有填充别名?

我的代码看起来像:

<html xmlns="http://www.w3.org/1999/xhtml">
<head runat="server">
    <title></title>

    <script src="Scripts/require.js" type="text/javascript"></script>

    <script type="text/javascript">

        require(["scripts/jQuery/Core/jquery-1.7.2.min"], function ($) {

            // jQuery is not passed-into the function, so the alias fails!
            $(function () {
                var stop = "";
            });
        });

    </script>

</head>
<body>
    <form id="form1" runat="server">
    </form>
</body>
</html>

他们的样本看起来像:

//Inside scripts/main.js
require(["some/module", "a.js", "b.js"], function(someModule) {
    //...
});
4

3 回答 3

17

jQuery 应该通过特殊名称“jquery”加载,否则它不会注册自己(因为 jQuery 使用命名定义)。

// create an alias that points to proper file
require.config({
  paths : {
    jquery : "http://ajax.googleapis.com/ajax/libs/jquery/1.7.1/jquery.min"
  }
});

// require jquery usign the path config
require(["jquery"], function ($) {
    console.log($);
});

这就是为什么命名定义被认为是反模式的主要原因,并且应该只在需要时使用(当您在同一个文件中有多个模块时)。

于 2012-04-13T15:11:53.150 回答
2

请务必阅读 RequireJS+jQuery 示例项目的“ README.md ”。使用 jQuery 有许多复杂性,您需要在初始设置期间决定如何最好地为您的项目解决它。但是,一旦您确定了最适合您的方法并实施了它,它就不应该再成为问题了。

许多复杂性还来自 jQuery 不是真正的 AMD 模块这一事实,如果它检测到定义函数可用,他们只是在代码库中进行了定义。例如,这意味着 jQuery 模块名称将始终为“jquery”(注意小写“q”),除非您自己包装它,因此如果您在配置中定义它的路径,则必须具有名为“jquery”的键(再次,使用小写的 'q'),否则会出现不匹配。当我们第一次在我们的项目上设置 RequireJS 时(我们将键命名为“jQuery”),这让我们有点吃惊。

于 2012-04-13T15:19:18.940 回答
0

您的脚本文件夹是“脚本”还是“脚本”?

您正在请求“Scripts/require.js”以及“scripts/jQuery/Core/jquery-1.7.2.min”。看看 Firebug 的 Net 选项卡...我敢打赌你会在那里生成 404。

于 2012-04-13T15:12:05.477 回答