javascript - Arcgis (ESRI) dojo 导致使用 jQuery 的定义的组件进行 multipleDefine

标签 javascript jquery dojo arcgis amd

我希望在我的 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 问题,谢谢!

为了简单起见,我还添加了另一个 jsFiddle,它不使用 arcgis dojo AMD,而是 requirejs AMD,虽然产生的问题不同,但任何解决方案都可能解决这里的主要主题

https://jsfiddle.net/w33zwjhx/

<小时/>

更多信息如下:

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

2) asp.net mvc 5 默认会添加以下 script 标签

<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) 第 3 步将隐式启动 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/

最佳答案

我想我已经回答了我自己的问题。要点是:

1)在第3方组件中使用define(['jquery'])是正确的

2)由于jquery是在arcgis dojo之前定义的,因此我们必须在加载dojo之后编写以下代码来修复它

// jquery was loaded before AMD is available, now that AMD is made available after loading dojo,
// register jquery as an AMD module so that AMD compatible plugins are able to locate jquery
define('jquery', [], function () { return jQuery; });

3)我们还必须在arcgis dojo之前定义dojoConfig

var dojoConfig = {
  packages: [{
    name: 'newmodule',
    location: '/Scripts/newmodule',
    main: 'newmodulejs'
  }]
};

4)现在我们可以使用任何第三方组件

require(['newmodule', 'dojo/domReady!'], function (newModule) {
    // newModule.myfunc();
});

这些定义和要求让我非常糟糕

关于javascript - Arcgis (ESRI) dojo 导致使用 jQuery 的定义的组件进行 multipleDefine,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33842958/

相关文章:

javascript - 将使用 JavaScript 和 AJAX 的 HTML 表单的输入传递给 PHP POST 方法

javascript - 如何将工具栏按钮添加到自定义 tinymce 下拉菜单中?

javascript - 如何在鼠标悬停时使图像变暗?

javascript - 向下滚动箭头 CSS

javascript - asp.net 中哪个函数会先执行?

jquery - 更改字符串

jquery - 有人在同一个项目中使用过 Dojo 和 JQuery 吗?

jquery - Dojo 附加按钮(如 jQuery)

javascript - 如何解决 Blocked a frame with origin from accessing a cross origin frame error in wordpress?