繁体   English   中英

dojo AMD加载顺序是什么?

[英]what is the dojo AMD loading sequence?

我尝试寻找dojo AMD加载模块的顺序,正如我在其他问题中看到的那样,模块在require []块中的放置顺序。

require(["dojo/dom",
"dijit/Dialog",
"dijit/form/Form", 
"dijit/form/TextBox",
"dijit/form/ValidationTextBox",
"dijit/form/Textarea",
"dijit/form/Button",
"dojox/validate/web",
"dojo/request",
"dojo/domReady!"],

将是require块的示例...

好吧...没有真正的加载顺序(在AMD中是异步的)。 dojo/domReady! 模块也没有最后加载,其模块本身延迟了AMD回调的执行。

有人放下dojo/domReady!的唯一原因dojo/domReady! 最后是因为返回的对象没有用。 但是,使用或不使用,如果您需要在其后放置一个特定的模块,则仍然必须添加一个额外的参数,例如:

require(["dojo/dom", "dojo/domReady!", "dojo/aspect"], function(dom, garbage, aspect) {

});

上述工程的代码并会留即使你争我夺模块的顺序工作,这里唯一的问题是,因为我们要的aspect模块,我们需要添加第二个参数为domready中的模块。

因此,通常的做法是将所有不需要的模块(至少是返回的对象)放在序列的末尾,例如:

require(["dojo/dom", "dojo/aspect", "dojo/domReady!"], function(dom, aspect, garbage) {

});

并且由于JavaScript中的参数是可选的,因此我们可以将不需要的参数保留下来(如果它们在末尾),因此上面的代码与以下代码相同:

require(["dojo/dom", "dojo/aspect", "dojo/domReady!"], function(dom, aspect) {

});

这就是为什么通常将其作为最后一个参数添加的原因。 尽管还有其他通常放在最后的模块,例如:

  • 所有dojo/NodeList-*模块:这些模块为NodeList模块添加了额外的功能。 但是,它们直接应用,这些模块的返回对象没有用。
  • dojo/parser :当您将Dojo配置为自动解析所有HTML(使用parseOnLoad )时,则不一定需要引用解析器模块。 但是,您必须添加它才能使其正常工作。
  • 所有小部件:如果使用声明性标记,则不需要模块本身的实例,但是,必须加载该实例才能使其正常工作。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM