如何等到需要在道场结束

时间:2013-07-01 14:17:17

标签: dojo require synchronized

我正在为其他开发人员提供基础架构,我正在使用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方法返回?

2 个答案:

答案 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();