我在 Dojo 1.7.2 中使用 AMD 加载程序创建了如下所示的 Dojo 小部件
var myCpane;
require([
"dijit/layout/ContentPane"
], function(ContentPane) {
myCpane = new ContentPane();
});
myCpane.startup(); // It gives 'myCpane' as undefined
在上面的示例中,在最后一条语句中,变量“myCpane”以“未定义”的形式出现,如果我在“require()”回调函数中使用“myCpane.startup()”,它将正常工作。
但我想在 'require' 函数之外使用那个 'myCpane' 变量(出于多种原因)。我知道由于 Dojo 的组件加载过程而延迟了“require()”回调函数的执行。
我的问题是,
- 如何阻止“require()”函数,直到它完成执行它的回调函数。
因此,当控件从“require()”函数中出来时,变量“myCpane”不会是“未定义的”
==================================================== =========
为了克服这个问题,我编写了一个小函数来加载模块并等待模块加载完成
LoadModule: function(modulePath) { // modulePath = "dijit/layout/ContentPane"
var moduleObject = undefined;
require({async: false}, [modulePath], function(getModuleObject) {
moduleObject = getModuleObject;
});
// Wait until the module loads completes
while(moduleObject === undefined);
// Return the loaded module.
return moduleObject;
}
函数的输出总是执行while循环,控件永远不会进入'require()的回调函数来设置变量“moduleObject”的值。
'require()' 函数何时会调用它的回调函数?我已经使用浏览器调试器窗口验证了文件'ContentPane.js'已正确加载,但未调用回调函数,如果我评论while循环,则正确调用回调。
在我的情况下,控件何时进入回调函数?