javascript – Arcgis(ESRI)dojo使用define for jQuery导致multipleDefine与组件

我希望在ArcGIS Web应用程序中包含某人编写的组件.

但是当我包含时,我总是在控制台窗口遇到一个multipleDefine问题.

有两种方法可以解决它,即通过在组件下面移动以下脚本.

<script src="https://js.arcgis.com/3.14/"></script>

或者宣布推迟脚本

<script defer src="https://js.arcgis.com/3.14/"></script>

然而,这些并不能解决问题的根源,因为基本上该组件不会使用AMD而是使用浏览器全局来声明它

你们有什么想法吗?我在这里包含了一个jsFiddle:

https://jsfiddle.net/h9ztsrm3/5

只需打开控制台窗口即可看到multipleDefine问题,谢谢!

为简单起见,我还包括另一个不使用arcgis dojo AMD但需要AMD的jsFiddle,而由此产生的问题不同,任何解决方案都可能解决这里的主题

https://jsfiddle.net/w33zwjhx/

更多信息如下:

1)我正在尝试使用带有bootstrap 3的asp.net mvc 5生成带有arcgis映射的Web应用程序

2)asp.net mvc 5默认会添加以下脚本标记

<script src="/Scripts/jquery-2.1.4.js"></script>
<script src="/Scripts/bootstrap.js"></script>

3)我继续将map集成到我的应用程序中

<script src="/Scripts/esri/3.14/init.js"></script>

4)当arcgis与dojo耦合时,步骤3将隐式启动dojo

5)我发现了一个很好的组件,我可以在互联网上使用并继续集成它

https://github.com/ehpc/bootstrap-waitingfor/blob/master/src/waitingfor.js

<script src="/Scripts/ehpc/waitingdialog/src/js/waitingdialog.js"></script>

6)但是组件具有以下代码,并且由于dojo已经通过arcgis加载,因此执行’if’语句的内容

if (typeof define === 'function' && define.amd) {
    define(['jquery'], function ($) {
        return (root.waitingDialog = factory($));
    });
}

7)我现在按照jsFiddle得到了问题

8)我研究了解更多,但以下网站告诉我define([‘jquery’])是编写组件的正确方法

http://ifandelse.com/its-not-hard-making-your-library-support-amd-and-commonjs/

最佳答案 我不清楚你在这里尝试做什么,但似乎你在你在那个小提琴的HTML窗格中添加的代码中创建了自己的问题.

如果在存在AMD加载程序的情况下加载,jQuery已经将自己定义为AMD模块.如果你加载jQuery第二,下面的代码将起作用,因为jQuery碰巧用静态模块ID定义自己:

<script src="https://js.arcgis.com/3.14/"></script>
<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.11.3/jquery.min.js"></script>
<script>
    require([ 'jquery' ], function ($) { ... });
</script>

(虽然jQuery和$也将在全球注册.)

通过AMD加载器直接加载jQuery的更理想方式如下:

<script>
    var dojoConfig = {
        async: true,
        paths: {
            jquery: 'https://ajax.googleapis.com/ajax/libs/jquery/1.11.3/jquery.min'
        }
    };
</script>
<script src="https://js.arcgis.com/3.14/"></script>
<script>
    require([ 'jquery' ], function ($) { ... });
</script>
点赞