将jQuery Mobile(1.1.0)与AMD分离(RequireJS)

时间:2012-03-01 19:12:59

标签: javascript jquery jquery-mobile requirejs amd

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

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

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

Error: Mismatched anonymous define() module: [object Object]

如果jQuery Mobile没有调用define(),我不明白这是怎么回事。我在这做错了什么?这是jQuery Mobile的新条件AMD支持吗?

1 个答案:

答案 0 :(得分: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会很有趣。