YUI3 - 创建全局变量以避免使用.use(...);

时间:2012-05-25 08:55:57

标签: javascript yui yui3 yahoo-api

我成功地将我的页面从YUI2迁移到YUI3,在升级时我使用的是YUI3的动态库加载,仅包括yui-min.js并使用YUI().use(...) ,但现在我要删除本地YUI2 JS并在本地添加YUI3。

我创建了一个全局变量var Y = YUI().use('*',function(Y){});,并将yui-min.js更改为yui-core-min.js,并添加了我想要使用的库,它可以很好地更改Y instead YUI()

Y.use('datatable','datasource', function(Y){
    ...
    fcTable = new Y.DataTable(...);
});

但我想知道我是否只能第一次拨打Y.use(...)并且只能使用全局Y变量,如:

    ...
    fcTable = new Y.DataTable(...);

我认为它可能会使装载更快,这是推荐的吗?

谢谢你的时间;)

1 个答案:

答案 0 :(得分:3)

因为当前不在页面上的模块的use()是异步操作,所以您正在设置竞争条件。忽略这一点,是可能的,是的。

Y.use('datatable');
当模块结算并附加时,

将使Y.DataTable全局可用。唯一的麻烦是你不能保证什么时候会这样。这就是use()回调的原因。

如果所有模块依赖关系已静态存在于页面上(在< script>中),use()将是同步的,这将允许

Y.use('datatable');
var table = new Y.DataTable({ … });

但是,如果您在页面上包含模块脚本并调用use('*'),那么以后就不需要显式调用Y.use('datatable'),因为*会附加所有内容。