javascript - 范围问题 - 从外部函数调用内部 dojo 函数
问题描述
我有一个在 dojo 函数的 require 部分之外的函数。
此函数需要调用位于 dojo 要求块中的函数。
如何从位于 dojo 要求块之外的函数调用要求代码块中的函数?
也许更多的应用程序流程将证明需要
- 主窗口应用程序产生一个子窗口
- 主窗口向具有将接收消息的全局函数的子窗口发送消息
- 子窗口接收消息
- 外部函数解析消息并确定映射需要更新(产生的子窗口是映射窗口,在require部分加载了很多ESRI模块)
- 子窗口函数需要调用 dojo 的 require 代码块中的函数来执行实际的 ESRI 相关任务
解决方案
这是一个 hacky 解决方案,如果可能,您应该真正考虑重新排列模块的方法,但这至少应该有效:
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
包含函数的模块(在示例中命名),将其存储在 require 之外的变量"your/module/function"
中,并在已经在外部定义的函数中调用它。我添加了一个块,因为它是一个很好的衡量标准,可以防止你的代码在你过早调用时崩溃。myModuleFunction
try-catch
outside
如果 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
。
推荐阅读
- angular - getItemForm 不调用第二个承诺
- unit-testing - 期望将外部程序的退出命令识别为自己的
- https - 如何使用基本身份验证或 https 将用户从一个网页重定向到另一个受保护的网页
- java - Java Streams 按其键的属性分组 Map
- amazon-web-services - 通过访问点向 Amazon S3 授权角色
- android - 颤振 - 如何将类保存在变量中
- php - 如何防止页面一起运行或在 PHP 中组合
- python - python-binance如何设置tp/sl,数量
- variables - 为 point_dist 分配点 (x1, y1) 和点 (x2, y2) 之间的距离。计算为:距离 = SquareRootOf( (x2 - x1)2 + (y2 - y1)2 )
- javascript - 如何使用多个图表的多个下拉元素正确处理 ReactJS 中的状态变化