2

我想同步附加 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 第一种方法应该也可以工作。我错过了什么?

4

2 回答 2

0

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

于 2013-04-08T20:30:30.223 回答
0

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

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

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

于 2013-04-08T19:09:25.390 回答