范围问题 - 从外部函数调用内部 dojo 函数
Scoping issue - calling an internal dojo function from external function
我有一个功能超出了 dojo 功能的要求部分。
此函数需要调用驻留在 dojo require 块中的函数。
如何从驻留在 dojo 需求代码块之外的函数调用需求代码块内的函数?
也许更多的应用程序流程将证明需要
- 主 window 应用程序产生一个 child window
- Main window 向 child window 发送一条消息,该 window 具有将接收消息
的全局函数
- Child window 收到消息
- 外部函数解析消息并确定映射
需要更新(生成的 child window 是映射 window 并在 require 部分加载了很多 ESRI 模块)
- childwindow函数需要调用一个函数是
在 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
包含函数的模块(在示例中命名为 "your/module/function"
和 myModuleFunction
),将其存储在变量 outside 并在已定义 outside 的函数中调用它。我添加了一个 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
它。
谈论黑客...这是我为获得所需结果所做的工作。
我在窗体上创建了一个隐藏按钮,绑定了点击事件以触发该功能。
收到并处理消息后,我触发了按钮单击事件 - 中提琴!!
感谢大家的帮助。
我有一个功能超出了 dojo 功能的要求部分。
此函数需要调用驻留在 dojo require 块中的函数。
如何从驻留在 dojo 需求代码块之外的函数调用需求代码块内的函数?
也许更多的应用程序流程将证明需要
- 主 window 应用程序产生一个 child window
- Main window 向 child window 发送一条消息,该 window 具有将接收消息 的全局函数
- Child window 收到消息
- 外部函数解析消息并确定映射 需要更新(生成的 child window 是映射 window 并在 require 部分加载了很多 ESRI 模块)
- childwindow函数需要调用一个函数是 在 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
包含函数的模块(在示例中命名为 "your/module/function"
和 myModuleFunction
),将其存储在变量 outside 并在已定义 outside 的函数中调用它。我添加了一个 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
它。
谈论黑客...这是我为获得所需结果所做的工作。
我在窗体上创建了一个隐藏按钮,绑定了点击事件以触发该功能。
收到并处理消息后,我触发了按钮单击事件 - 中提琴!!
感谢大家的帮助。