大多数 Dojo 模块应该需要 dojo/domReady 吗?

Should most Dojo modules require dojo/domReady?

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

就我而言,我正在为 Esri 的 Web AppBuilder 编写一个小部件。它有一个名为 Widget.js 的入口点。如果我要求dojo/domReady!在 Widget.js 中,我可以安全地在所有其他模块中省略它吗?更好的解决方案是像 ?

中讨论的那样在单元测试中覆盖 domReady

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

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

至于dojo/domReadydojo/domReady!的区别,Dojo loader会把后者当作一个插件,!之后的字符串作为插件的参数。在 domReady 情况下,插件会延迟模块的加载,直到 DOM 就绪。如果您不包含 !,则加载器将加载 domReady 作为实用程序并且不会将其视为插件。有关插件的更多信息,请查看 here...

+1 为您在上面的后续评论!