代码之家  ›  专栏  ›  技术社区  ›  flux9998

dojo AMD加载顺序是什么?

  •  0
  • flux9998  · 技术社区  · 10 年前

    我已经尝试寻找dojoAMD加载其模块的顺序,正如我在其他问题中看到的,模块在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 回复  |  直到 10 年前
        1
  •  1
  •   Dimitri Mestdagh    10 年前

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