通过Javascript

时间:2018-07-06 19:26:55

标签: javascript dojo requirejs amd arcgis-js-api

这个问题已经被回答过很多次了,我知道一个解决方案是简单地更改它,因此(Esri's)dojo是最后一个要加载的问题。

问题是我正在使用无法访问页面html来更改顺序的模块化小部件,我只能通过Dojo的AMD Loader加载库。

文件夹结构:

/Widget
--/Main.js
--/Datatable.js

这是Main.js文件:

define([
  './Datatable', 
  'https://code.jquery.com/jquery-3.3.1.min.js',
  'https://stackpath.bootstrapcdn.com/bootstrap/4.1.1/js/bootstrap.bundle.js',
  ],
function(Datatable){ ... }

和Datatable.js(只是我为组织创建的另一个模块):

define([
    'https://cdn.datatables.net/v/bs4/dt-1.10.18/r-2.2.2/datatables.min.js'
    ],function(){ ... }

我在这里有两个主要问题;

1)AMD Loader是异步的,不会解决非AMD模块的依赖关系,这意味着顺序应该很重要

datatables.min.js要求bootstrap.bundle.js,要求jquery-3.3.1.min.js

因此,如果我很幸运,请求将根据延迟顺序加载,不是很可靠...

2)Bootstrap和Datatable通用javascript文件都引发“ multipleDefine”错误,这可能是由于它们试图定义“ jquery”而引起的,我真的不确定如何解决此问题(拥有它们的本地编辑副本不会'不理想)

如何解决这两个问题?

1 个答案:

答案 0 :(得分:2)

对于订单,您可能可以执行以下操作:

require(['https://code.jquery.com/jquery-3.3.1.min.js'], function() {
    require(['https://stackpath.bootstrapcdn.com/bootstrap/4.1.1/js/bootstrap.bundle.js'], function() {
        define(['./Datatable'], function(Datatable){ ... }
    });
});

将以特定顺序强制执行分辨率。
当2个组件试图在全局范围(此处为multipleDefine)上创建函数define时,会引发window错误。
很难给出一个完美的答案。
如果您可以摆弄小提琴或类似的东西,我可能会更深入。
我想到的一件事: 您可以在加载引发错误的文件之一之前尝试delete window.define,但这很丑陋,甚至可能无法正常工作...