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

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

当我包含 jQuery Mobile 时,出现以下错误:

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

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

有帮助吗?

解决方案

为了确认这一点,您应该使用 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 将会很有趣。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top