1

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

4

2 回答 2

2

您可以从 require 响应中调用 next 函数,也可以使用延迟对象。

 function Init()
 {
    var d =  new dojo.Deferred();

    require(["...myFiles..."], 
       function()
       {
           d.resolve(true);
       });
   return d;
 }

其他文件

 Init().then(myFiles.DoSomething);
于 2013-07-01T14:34:56.337 回答
0

使您的初始化程序成为一个模块,例如“my/Files”,并使您的 init 和 doSomething 函数成为该模块的静态方法:

在“我的/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();
于 2013-07-01T20:41:29.223 回答