Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/380.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/jquery/72.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 将jQuery Mobile(1.1.0)与AMD(RequireJS)分离_Javascript_Jquery_Jquery Mobile_Requirejs_Amd - Fatal编程技术网

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

Javascript 将jQuery Mobile(1.1.0)与AMD(RequireJS)分离,javascript,jquery,jquery-mobile,requirejs,amd,Javascript,Jquery,Jquery Mobile,Requirejs,Amd,我试图在一个使用RequireJS for AMD的项目中包含jQuery Mobile,但是,我不想将jQuery Mobile作为AMD模块加载。这背后的想法是,我们将使用AMD实现特定于应用程序的逻辑,但任何外部库依赖项(如jQuery)都将通过手动定义脚本标记而纳入全局范围 我遇到的问题是,在RequireJS脚本标记似乎导致RequireJS定义匿名模块并产生我不理解的冲突之前,为jQuery mobile定义一个脚本标记。我查看了jQuery和jQuery移动代码,它们被设置为有条件

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

我遇到的问题是,在RequireJS脚本标记似乎导致RequireJS定义匿名模块并产生我不理解的冲突之前,为jQuery mobile定义一个脚本标记。我查看了jQuery和jQuery移动代码,它们被设置为有条件地调用
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,我想为Realjs 1.1修复一些问题。但是第一组脚本标记应该可以工作


如果不是这样的话,了解更多应用程序的JS模块如何使用jQuery和jQuery mobile将是一件有趣的事情。

因此,事实上,我确实像我项目中的第一个示例一样设置了脚本,但仍然会遇到错误。我刚刚发现,当jquerymobile1.1.0和一个单独的库()也被包括进来时,问题似乎就出现了,它也有条件地支持AMD。我检查了,两个库都没有调用define,但仍然得到不匹配错误。我把一个快速的POC放在一起。我将继续研究这个问题,但我对AMD是个新手。谢谢您的帮助。您正在测试哪个浏览器?我在Chrome和Safari中试过,发现了错误,但如果我在Firefox中试过,就可以了。当我将脚本标记移到头部而不是身体内部时,错误在webkit浏览器中消失了。所以我认为这是webkit浏览器和正文内容的一些奇怪问题。因此,要么将脚本放在头部,要么通过requirejs(推荐)加载所有lib,这很奇怪。抱歉,我在Safari中测试,应该在其他浏览器中测试。我知道建议使用require加载所有lib,但在全局范围内使用更多实用程序驱动的库(如jQuery和下划线)似乎更有意义,因此AMD模块中的依赖项只是应用程序模块,而不是lib,但我可能误解了其中的某些内容。我这样设置的另一个次要原因是,现在很多库似乎正在赶上AMD,这避免了对一次性AMD版本的篡改。无论如何,我要继续,把这些脚本放在头上,因为我认为这对这个应用程序是有意义的。谢谢你的帮助,谢谢你的RequireJS!