我正在为其他开发人员提供基础架构,我正在使用Dojo。
在我的Init函数中,我正在使用'require'方法(当然),其中一个参数是所有模块加载后的回调函数。
问题是客户端不想使用回调。他想打电话给我,然后排队使用我(让我的Init方法同步) - 并在我们确定装完我们的模块之后给他代码。
我的代码
<script src=..../dojo.js></script>
function Init()
{
var loaded = false;
require(["...myFiles..."],
function()
{
loaded = true;
});
// Whatever to do here or some other way to hold till the require operation finished
while (!loaded) // :)
}
我的客户端
Init();
myFiles.DoSomething();
有可能吗? 要使需求同步或做其他等待它结束的事情? 仅在require方法完成后才从init方法返回?
答案 0 :(得分:2)
您可以在require响应中调用下一个函数,也可以使用延迟对象。
function Init()
{
var d = new dojo.Deferred();
require(["...myFiles..."],
function()
{
d.resolve(true);
});
return d;
}
其他档案
Init().then(myFiles.DoSomething);
答案 1 :(得分:0)
让你的初始化程序成为一个模块,比如“my / Files”,并使你的init和doSomething函数成为该模块的静态方法:
在“my / Files.js”中
define([
"dojo/_base/declare",
...<your other required dependencies>
], function(declare){
var myFiles = declare(null, {});
myFiles.init = function(){
// Your initialization code
}
myFiles.doSomething = function(){ ... }
return myFiles;
});
在你的HTML中:
<script type="dojo/require">
myFiles : "my/Files"
</script>
然后你可以在你的javascript中使用它:
myFiles.init();
myFiles.doSomething();