Я хочу, чтобы main.js вызывал makeAMap () из map.js, но makeAMap () обернут в оператор "require", который действительно доставляет мне трудности, я даже пытался сделать его глобальным.Сначала проблема казалась просто в том, что функция загружалась слишком поздно, но после попытки обратных вызовов и обертки функции я думаю, что это объединенная проблема с синхронизацией и требованием.Пока я нашел обходной путь, но я бы предпочел main.js запустить метод.
Я пробовал обратные вызовы, оболочки функций, различные глобальные и оконные переменные и $ .getScript.map.js импортируется первым в HTML.Я нашел этот похожий пост Как вызвать функцию из другого файла с requireJS , но, похоже, он движется в противоположном направлении, и я не думаю, что смогу применить решение.Есть еще один похожий вопрос Как мне вызвать функцию, которая определена внутри require () вне require ()? , но ответ больше связан с кнопкой / событием и не помогаетme.
//map.js
makeAMap = function (mapBasemap) {}; //a global function
loadTheMapController = function(){
require([
"esri/Map",
"esri/views/MapView"
], function (Map, MapView) {
makeAMap = function(mapBasemap){ //overrides the global function
var theMap = new Map({
basemap: mapBasemap
});
return theMap;}
console.log(makeAMap); //displays the correct function after loadTheMapController is called
}//end loadTheMapController wrapper
//main.js
console.log(makeAMap); //displays the empty global function
loadTheMapController();
console.log(makeAMap); // still displaying empty global function
//even tried this
$.when(loadTheMapController()).then(console.log(makeAMap));
//returns the empty function like it wasn't overwritten
в качестве альтернативы просто для проверки того, что глобальная переменная перезаписывается
//map.js
var makeAMap;
$(document).ready(function () {
require([
"esri/Map",
"esri/views/MapView"
], function (Map, MapView) {
makeAMap = function(mapBasemap){
var theMap = new Map({
basemap: mapBasemap
});
return theMap;
}
console.log(makeAMap); //returns the correct function
}//end of doc.ready
console.log(makeAMap); //returns undefined
Я полагаю, у меня возникло несколько проблем, первая из которых - моя глобальная функция неперезаписываетсяИзвините за многослойный вопрос.Что ты думаешь?