范围问题-从外部函数调用内部dojo函数

时间:2018-11-12 16:23:00

标签: javascript dojo esri-javascript-api

我有一个函数不在dojo函数的require部分之外。

此函数需要调用驻留在dojo require块内的函数。

如何从位于dojo require块外部的函数中调用require代码块中的函数?

也许更多的应用程序流程将证明需求

  • 主窗口应用程序产生一个子窗口
  • 主窗口向子窗口发送一条消息,该子窗口具有接收消息的全局功能
  • 子窗口接收到消息
  • 外部函数解析消息并确定地图 需要更新(产生的子窗口是映射窗口,并在require部分中加载了许多ESRI模块)
  • 子窗口函数需要调用一个 在dojo的require代码块中执行与ESRI相关的实际任务

2 个答案:

答案 0 :(得分:0)

这是一个骇人听闻的解决方案,如果可能的话,您应该认真考虑一种重新排列模块的方法,但这至少应该有效:

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),将其存储在require和在已经 outside 定义的函数中调用它。我添加了一个try-catch块,因为它是一种很好的措施,并且可以防止在您过早调用outside时导致代码爆炸。

如果功能 inside 中的dojo require块不是模块,则几乎是相同的:

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

答案 1 :(得分:0)

谈论黑客...这是我为获得所需结果而要做的事情。

我在表单上创建了一个隐藏按钮,绑定了click事件以触发该功能。

收到并处理了邮件后,我触发了按钮单击事件-中提琴!

感谢大家的帮助。