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

Javascript 大多数Dojo模块是否需要Dojo/domReady?,javascript,dojo,jasmine,Javascript,Dojo,Jasmine,我开始对我的一些Dojo模块进行单元测试,Dojo/domReady!正在制造麻烦。(特别是,每当我需要一个具有dojo/domReady的模块时!在它的需求子树的某个地方,Jasmine默默地假装测试不存在。)我在每个涉及DOM的模块中都需要它,因为我认为它可能不会造成任何伤害。现在我想知道我是否真的需要到处调用它,或者它是否真的只需要在顶层调用 在我的例子中,我正在为Esri的Web AppBuilder编写一个小部件。它有一个叫做Widget.js的入口点。如果我需要dojo/domRea

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


在我的例子中,我正在为Esri的Web AppBuilder编写一个小部件。它有一个叫做Widget.js的入口点。如果我需要dojo/domReady!在Widget.js中,我可以安全地在所有其他模块中忽略它吗?更好的解决方案是在单元测试中重写domReady吗,就像在中讨论的那样?

dojo/domReady
是一个插件,用于在加载DOM之前延迟加载模块<代码>准备好了插件将自身绑定到浏览器的dom就绪事件,dom就绪后立即触发该事件。然而,这并不意味着所有的小部件都已被解析。。。您可以在模块的依赖项中添加
dojo/ready
,并将模块代码封装在
ready(function(){//your code})中

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

至于
dojo/domReady
vs
dojo/domReady之间的区别,Dojo loader将后者视为插件,并在
之后添加字符串作为插件的参数。在domReady的情况下,插件导致延迟模块的加载,直到DOM就绪。。如果不包括
然后加载程序将作为实用程序加载domReady,而不会将其视为插件。有关插件的更多信息,请参阅


+1以上为您的后续评论

我想我说多姆雷迪是个问题太快了。很明显,这是一个错误!是罪魁祸首。我的测试不会在我使用插件时运行(比如“dojo/text!something.html”)。重写domReady.js没有帮助。我认为这可能与此有关:看起来我现在可能运气不佳,除非我的实际问题的答案是“是”。还有一个更新-我发现如果我使用我正在测试的模块,一切都会神奇地工作。我无法解释,但我可以说我完全爱上了StubModule!我很高兴我有一个解决当前问题的方法,但如果有人对我最初的问题有答案,我还是很有兴趣听听。听起来你遇到的问题是,你使用的测试系统不了解AMD模块,对异步操作的支持很差,因此,在开始测试之前,它不能等待DOM就绪加载程序插件(或任何加载程序插件)完成解析。也许你应该重新考虑使用Intern,它确实支持这一开箱即用的测试系统,而不是使用性能较差的测试系统并陷入更多的麻烦:)@CSnover-显然你有一个偏好。好像你是《实习生》之类的书的作者!;)但说真的,我非常努力地让实习生开始工作。不幸的是,我无法让它与我想要的JS库组合一起工作。我在实习生和Jasmine之间来回跳了大约两周,最后让Jasmine正常工作。是的,我有偏见,但那是因为我在编写测试库之前研究了每个测试库,这些问题就是它最初创建的原因:其他测试系统根本不能正确处理模块性或异步性。我只看到你问过一个关于实习生的问题,几个小时后就得到了回答,所以我很困惑,如果你已经试了两个星期,为什么不早点寻求帮助,让事情开始运转呢!:)为了确保我理解,您建议我使用
domReady在入口点和
ready()
其他地方?我很惊讶,因为这似乎与dojo/ready文档()相反,dojo/ready文档()说,“在大多数情况下,domReady插件应该足够了,并且不需要这种方法。”不,我不建议同时使用它们。如果您需要等待所有其他小部件被解析,那么,
ready
更合适。啊,我明白了。我想我可能可以通过
ready()
逃脱,因为DOM将由框架创建,而我的小部件只是添加到其中。谢谢
dojo/ready
在现代应用程序中非常不受欢迎。在Dojo1.7(采用AMD)之前,它是等待模块和文档加载的唯一方法。在1.7+中,
dojo/domReady
需要
回调。关于解析器,如果您自己运行解析器(而不是依赖于
parseOnLoad
),您也不需要
dojo/ready
。要么在解析之前加载解析器需要的所有模块,要么等待
解析器返回的承诺。在尝试与声明式创建的小部件交互之前,parse
解析。parse完全按照您所描述的做,但在1.8+中,解析器还能够自动要求尚未加载的模块,这会导致
parse
调用异步解析,这就是我提出它的承诺的原因。如果调用
parser.parse
时已加载通过
数据dojo type
引用的所有模块,则它将同步执行。关于
dojo/domReady,除非您在