然而,每当我这样做时,控制台窗口总是会出现多重定义的问题。
有两种解决方法,一种是将以下脚本移到组件下面。
<script src="https://js.arcgis.com/3.14/"></script>
或者在脚本上声明defer
<script defer src="https://js.arcgis.com/3.14/"></script>
然而,这些并没有解决问题的根本,因为组件基本上不会使用AMD,而是使用浏览器全局来声明它。
你们有什么想法吗?我已经在jsFiddle中包含了这个问题:
https://jsfiddle.net/h9ztsrm3/5
只需打开您的控制台窗口,您就可以看到multipleDefine问题,谢谢!
为了简单起见,我还包括了另一个不使用arcgis dojo AMD而是requirejs AMD的jsFiddle,虽然导致的问题不同,但对此的任何解决方案可能也会解决这里的主题。
https://jsfiddle.net/w33zwjhx/
以下是更多信息:
1) 我正在尝试使用asp.net mvc 5和bootstrap 3创建一个带有arcgis地图的Web应用程序
2) asp.net mvc 5默认会添加以下脚本标签
<script src="/Scripts/jquery-2.1.4.js"></script>
<script src="/Scripts/bootstrap.js"></script>
3)我继续将地图集成到我的应用程序中
<script src="/Scripts/esri/3.14/init.js"></script>
4) 第三步将隐式启动dojo,因为arcgis与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/