如何同步连接YUI3模块?

时间:2013-04-08 14:17:42

标签: asynchronous module yui loading

我想同步附加YUI模块。

Given the YUI modules are already on the page
When I run: console.log YUI().use('base').Base
Then I get `undefined`

然而,

When I run: YUI().use('base', (Y) -> console.log Y.Base)
Then I eventually get the Y.Base ctor function

看起来加载器正在附加异步,因为它使用回调方法正常工作。 IIRC第一种方法也应该起作用。我错过了什么?

2 个答案:

答案 0 :(得分:0)

如果您在Node.js等受控环境中使用YUI,那么您应该可以使用useSync配置:

YUI({ useSync: true }).use('base').Base

但是在浏览器或任何其他客户端运行时,您应该坚持Y.use的异步性质,因此加载器可以根据功能检测等来计算要附加的模块的正确列表。手动包含在模块中的模块是不够的。想象一下IE中的scrollview-base,它需要一个名为scrollview-base-ie的特殊模块,除非你在IE中运行时构建包含该模块的初始标记时进行检测,否则你将缺少一个模块。再次,在加载东西时坚持异步模式。

答案 1 :(得分:0)

YUI模块确实希望通过回调中的Y对象进行调用。如果您确定所需的所有代码都已加载到页面上,则可以使用*同步附加它们。有关示例,请参阅https://github.com/evangoer/yui3-cookbook/blob/master/examples/loading/use_synchronous.html