什么是道场AMD加载序列?

时间:2014-08-11 22:55:46

标签: javascript dojo amd

我已经尝试过查找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块的一个例子......

1 个答案:

答案 0 :(得分:1)

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

有人将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)时,您不一定需要对解析器模块的引用。但是,您必须添加它才能使其正常工作。
  • 所有小部件:如果您使用声明性标记,则不需要模块本身的实例,但是,您必须加载它才能使其正常工作。