在requirejs中的document.ready之前执行代码

时间:2014-12-16 11:11:44

标签: javascript requirejs

我看到require.js支持在document.ready()被触发时执行代码。见:http://requirejs.org/docs/api.html#pageload

我只是想知道有没有办法让它在调用document.ready()之前100%执行代码?例如,代码main.js是否在document.ready()事件之前执行?感谢。

1 个答案:

答案 0 :(得分:1)

您的请求没有纯粹的RequireJS解决方案。从本质上讲,你要求的是:

  

我想a)以异步方式加载我的模块,但b)我想同步加载它们。

您使用RequireJS需要a。 RequireJS是一个用于加载AMD模块的加载器。 AMD代表异步模块定义。如果你使用RequireJS,你必须对它异步操作的事实感到满意。因此,无法保证在文档准备好之前加载和执行任何模块。

要求' b'您需要在文档准备好之前执行代码。除非强制执行模块同步,否则无法做到这一点。 (我已经考虑了延迟 ready事件的方法,但我认为这种情况一般都不可能。jQuery.holdReady之类的解决方案不是确实延迟了事件,但只延迟了那些使用jQuery.ready设置的处理程序。只要浏览器确定它发生但处理程序稍后被解雇,事件仍然会发生。只有jQuery处理程序受到影响什么都没有。)

您可以使用script元素(不使用async属性)加载代码,但之后您将无法使用RequireJS。

为RequireJS提供类似的解决方案是使用Almond。您的代码必须构建在一个捆绑包中。你可以同步加载这个包。它基本上与使用script元素具有相同的效果,但您仍然可以从模块化中受益。请注意,杏仁具有一系列限制。您必须自己决定这些限制是否对您有用。我已经解释了如何同步使用杏仁in this answer

相关问题