异步时的行为:false和true

use*_*006 3 dojo amd dijit.form requirejs

我正在使用AMD的编码方式,当我进行异步时: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>
Run Code Online (Sandbox Code Playgroud)

输出:在这两种情况下,我首先看到"我在DOM准备就绪",然后"我准备就绪"警报接下来.

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

谢谢.

小智 6

要回答你的问题,如果async设置为truthy值(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>
Run Code Online (Sandbox Code Playgroud)

要将加载程序置于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>
Run Code Online (Sandbox Code Playgroud)

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