大多数Dojo模块是否需要dojo / domReady?

时间:2015-10-06 14:26:55

标签: javascript dojo jasmine

我开始对我的一些Dojo模块和dojo / domReady进行单元测试!造成麻烦。 (具体来说,任何时候我需要一个具有dojo / domReady的模块!在其子树的需求中的某个地方,Jasmine默默地假装测试不存在。)我在每个触及的模块中都要求它DOM,因为我认为它不会造成任何伤害。现在,我想知道我是否真的需要到处调用它,或者它是否真的只需要在顶层。

就我而言,我正在为Esri的Web AppBuilder编写一个小部件。它有一个名为Widget.js的入口点。如果我需要dojo / domReady!在Widget.js中,我可以在所有其他模块中安全地省略它吗?更好的解决方案是在单元测试中覆盖domReady,例如在this answer中谈到的内容吗?

1 个答案:

答案 0 :(得分:2)

dojo/domReady!是一个插件,用于延迟加载模块,直到加载DOM。 domReady!插件将自己绑定到浏览器的dom-ready事件,一旦DOM准备好就会被触发。但是,这并不意味着您的所有小部件都已被解析...您可以在模块的依赖项中添加dojo/ready,并将模块代码放在模块中的ready(function(){ // your code });内,如果您需要运行解析完所有小部件后的代码。

Re:关于是否需要对所有小部件使用dojo/domReady!一次的问题:您通常会在引导模块的根目录中使用ready()一次,然后加载并解析所有其他依赖项。对于测试代码,您可能会使用ready()来确保解析所有小部件。

至于dojo/domReadydojo/domReady!之间的区别,Dojo加载器会将后者视为插件,并将!之后的字符串视为插件的参数。在domReady的情况下,插件会导致延迟模块的加载,直到DOM准备就绪。如果你不包含!,那么加载器会将domReady作为实用程序加载,并且不会像插件那样对待它。有关插件的更多信息,请查看here ...

+1以上的后续评论!