Javascript 什么是dojo AMD加载顺序?
我试图寻找dojo AMD加载其模块的顺序,正如我在其他问题中看到的,模块在require[]块中的放置顺序Javascript 什么是dojo AMD加载顺序?,javascript,dojo,amd,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", "d
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
last是因为返回的对象没有用处。但是,使用或不使用,如果需要放在后面的特定模块,则仍然需要添加额外的参数,例如:
require(["dojo/dom", "dojo/domReady!", "dojo/aspect"], function(dom, garbage, aspect) {
});
require(["dojo/dom", "dojo/aspect", "dojo/domReady!"], function(dom, aspect, garbage) {
});
上面的代码可以工作,并且即使您扰乱了模块的顺序也可以继续工作,这里唯一的问题是,因为我们需要方面
模块,我们需要为domReady模块添加第二个参数
因此,通常的做法是将您不需要的所有模块(至少是返回的对象)放在序列的末尾,例如:
require(["dojo/dom", "dojo/domReady!", "dojo/aspect"], function(dom, garbage, aspect) {
});
require(["dojo/dom", "dojo/aspect", "dojo/domReady!"], function(dom, aspect, garbage) {
});
由于JavaScript中的参数是可选的,我们可以将不需要的参数保留(如果它们在末尾),因此上面的代码与以下代码相同:
require(["dojo/dom", "dojo/aspect", "dojo/domReady!"], function(dom, aspect) {
});
这就是为什么它经常被添加为最后一个参数。尽管也有其他模块通常放在末尾,例如:
require(["dojo/dom", "dojo/domReady!", "dojo/aspect"], function(dom, garbage, aspect) {
});
require(["dojo/dom", "dojo/aspect", "dojo/domReady!"], function(dom, aspect, garbage) {
});
- 所有
dojo/NodeList-*
模块:这些模块向NodeList
模块添加额外功能。但是,它们是直接应用的,这些模块的返回对象没有用处
dojo/parser
:当您将dojo配置为自动解析所有HTML(使用parseOnLoad
)时,您不一定需要对解析器模块的引用。但是,您必须添加它才能使其工作
- 所有小部件:如果使用声明性标记,则不需要模块本身的实例,但是,必须加载它才能使其工作
您认为顺序有什么关系?它们是使用ajax以指定顺序并行加载的,发出尽可能多的请求,就像浏览器可以处理的那样。我意识到它们是以指定顺序加载的,并且以最快的速度加载,并且以异步方式完成。我认为需要首先加载“dojo/dom”模块,“dojo/domReady!”可能是最后一个模块,但是,对于哪些模块以及它们应该具体化的顺序,是否存在约定?那么,为什么许多关于为什么函数签名不起作用的其他dojo问题的答案——人们认为顺序很重要?这让我很困惑……因为异步意味着不必有订单——或者至少他们不会按照特定的订单完成加载。所以,也许我应该问“dojo以什么顺序开始加载它的AMD?它是基于require块的顺序?还是基于预定义的模块层次结构?”嗯,大多数问题都是关于映射顺序的。不管您如何对模块进行排序,但重要的是回调中的参数的顺序应该与您在模块数组中定义它们的顺序相同。所以:require([“1”,“2”,“3]”),函数(1,2,3){}代码>但如何排列模块数组并不重要,以下代码与其他代码完全相同:require([“2”、“1”、“3”],function(2,1,3){})代码>和它们的加载方式有点复杂,它们开始由它们的索引加载(因此以与您定义它们相同的顺序),但它是一个递归函数,也加载其依赖项,因此很难确定实际的顺序。即使你知道,你也不应该依赖它,因为它们开始加载的顺序无关紧要。所以这就是我想要的答案。。。我知道require([])模块在函数()中的顺序必须相同才能使用它们。我想我只需要进入调试器,逐步执行并尝试几个不同的require([])sig。