4

我正在尝试将 jQuery Mobile 包含在使用 RequireJS for AMD 的项目中,但是,我不想将 jQuery Mobile 作为 AMD 模块加载。这背后的想法是,我们将 AMD 用于特定于应用程序的逻辑,但任何外部库依赖项(例如 jQuery)都将通过手动定义脚本标签进入全局范围。

我遇到的问题是在 RequireJS 脚本标记似乎导致 RequireJS 定义一个匿名模块并创建我不理解的冲突之前为 jQuery mobile 定义一个脚本标记。我查看了 jQuery 和 jQuery Mobile 代码,它们被设置为有条件地调用该define()方法(如果存在)。由于我在加载 RequireJS 之前包含了这些标签,因此它们不应该调用define(). 我用断点仔细检查了这一点,但它们确实没有。

当我包含 jQuery Mobile 时,我收到以下错误:

错误:不匹配的匿名 define() 模块:[object Object]

我不明白如果 jQuery Mobile 没有调用define(). 我在这里做错了什么?这与 jQuery Mobile 的新条件 AMD 支持有关吗?

4

1 回答 1

4

确认一下,您应该使用 jQuery mobile 的内置版本,并且应该将它包含在 require.js 标记之前,就像这样 - 请注意 jquery 作为脚本标记包含在内,因为 jQuery mobile 依赖于它:

<script src="scripts/jquery.js"></script>
<script src="scripts/jquery.mobile.js"></script>
<script src="scripts/require.js" data-main="scripts/app"></script>

我希望这能奏效。如果您有这样的脚本,则可能会生成您看到的错误:

<script src="scripts/require.js" data-main="scripts/app"></script>
<script src="scripts/jquery.js"></script>
<script src="scripts/jquery.mobile.js"></script>

我认为这更多是 RequireJS 的问题,而不是 jQuery mobile,我想为 RequireJS 1.1 修复一些问题。但是第一组脚本标签应该可以工作。

如果不是这样,了解更多应用程序的 JS 模块如何使用 jQuery 和 jQuery mobile 会很有趣。

于 2012-03-01T19:49:21.467 回答