Вызов функции из одного контроллера, который заключен в «require» в другом контроллере - PullRequest
0 голосов
/ 31 мая 2019

Я хочу, чтобы 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

Я полагаю, у меня возникло несколько проблем, первая из которых - моя глобальная функция неперезаписываетсяИзвините за многослойный вопрос.Что ты думаешь?

...