3

我正在使用 AMD 编码方式,当我制作 async:false 时,我看不到执行行为有任何区别,即使 async true 或 false 我看不出有什么区别。

请看下面的代码片段:

<html>
<script type="text/javascript" src="../../dojoroot/dojo/dojo.js" data-dojo-config="async:true, parseOnLoad:true"></script>

<script type="text/javascript">
require(["dojo/domReady!"], function(){
alert("I am inside DOM ready");
});

require(["dojo/ready"], function(ready){
    ready(function(){
    alert("I am inside ready");
  });
});
</script>
<body>
some div's here
</body>
</html>

输出:在这两种情况下,我首先看到“我在 DOM 内部准备就绪”,然后是“我在内部准备就绪”警报。

如果我添加 async:true 和 async:false,您能否解释一下有什么区别?

谢谢。

4

1 回答 1

6

为了回答您的问题, ifasync设置为真值(true,1等),dojo/domReady并在被调用dojo/ready时加载。require如果async未设置,则这些模块在加载时立即dojo.js加载。所以对代码的执行方式没有影响只是这些模块何时可以使用。

这是 Dojo AMD 描述的片段:

为了向后兼容,加载器默认以同步模式启动,它会自动加载 Dojo 基础 API:

<script src="path/to/dojo/dojo.js"></script>
<script>
  // the dojo base API is available here
</script>

要将加载程序置于 AMD 模式,请将 async 配置变量设置为truthy:

<script data-dojo-config="async: 1" src="path/to/dojo/dojo.js"></script>
<script>
  // ATTENTION: nothing but the AMD API is available here
</script>

请注意,您只能在加载 dojo.js 之前设置 async 标志,并且在 AMD 模式下,Dojo Base 和任何其他库都不会自动加载 - 完全由应用程序决定加载哪些模块/库。

于 2013-06-28T08:35:32.993 回答