Проблема определения объема - вызов внутренней функции додзё из внешней функции - PullRequest
0 голосов
/ 12 ноября 2018

У меня есть функция, которая находится за пределами требуемой части функций додзё.

Эта функция должна вызывать функцию, находящуюся в блоке dojo require.

Как мне вызвать функцию, которая находится в блоке require code, из функции, которая находится за пределами блока require dojo?

Возможно, чуть больше потока приложений продемонстрирует необходимость

  • Приложение главного окна порождает дочернее окно
  • Главное окно отправляет сообщение в дочернее окно, которое имеет глобальную функцию, которая будет получать сообщение
  • Дочернее окно получает сообщение
  • Внешняя функция анализирует сообщение и определяет, что карта нуждается в обновлении (порождаемое дочернее окно является окном отображения и загружает много модулей ESRI в секции require)
  • дочерняя оконная функция должна вызывать функцию, которая в блоке требуемого кода dojo для выполнения актуальных задач, связанных с ESRI

Ответы [ 2 ]

0 голосов
/ 14 ноября 2018

Поговорим о хаке ... вот что я сделал, чтобы получить нужные мне результаты.

Я создал скрытую кнопку в форме, связал событие click с тем, чтобы отключить функцию.

Когда сообщение было получено и обработано, я запустил событие нажатия кнопки - и альт !!

спасибо всем за помощь.

0 голосов
/ 12 ноября 2018

Это хакерское решение, и вы должны действительно подумать о способе перестановки ваших модулей, если это возможно, но это должно по крайней мере работать:

var inside = null;

function outside () {
  try { inside(); }
  catch (err) { /* log error or throw away, whatever */ }
}

require(['dojo/_base/declare', ..., 'your/module/function'], function (declare, ..., myModuleFunction) {
  inside = myModuleFunction;
  outside();
});

Просто require модуль, который содержит функцию (названную"your/module/function" и myModuleFunction в примере), сохраните его в переменной вне запроса и вызовите его в функции, которая уже была определена за пределами .Я добавил try-catch блок, потому что это хорошая мера и предотвращает взрыв вашего кода, если вы вызываете outside слишком рано.

В случае, если функция внутри dojo require block isnэто не модуль, это почти то же самое:

var inside = null;

function outside () {
  try { inside(); }
  catch (err) { /* log error or throw away, whatever */ }
}

require(['dojo/_base/declare'], function (declare) {
  inside = function () { console.log('Inside the require block'); };
  outside();
});

За исключением того, что вам не нужно require это.

...