yui 2到yui-2-in-3

时间:2012-02-28 22:22:25

标签: yui yui3 yui2

我正在努力将YUI2代码更改为YUI 2-in-3格式。 我需要在我的JS代码中访问Y.YUI2对象(YAHOO对象)。

我需要全局这个对象,因为这个对象在JS代码的数百个地方使用,所以我想要一种更简单的方法来访问它,而不是每次我需要时通过回调访问它。因为我只有一个HTML文件应该有一个更简单的方法。

我正在使用SimpleYUI。 所以我的主要目标是使全局Y对象获得YUI2值。我不能通过Y.use(.....)来做到这一点,因为use()不会阻塞其余代码并且需要下面的代码YAHOO对象。

由于

1 个答案:

答案 0 :(得分:2)

最近我正在努力将我的项目从YUI 2.x转移到YUI 3.x.在这里,我想分享我的经验和解决方案。

Firts,我想你是红色文章:“使用YUI 2 in 3”(http://yuilibrary.com/yui/docs/yui/yui-yui2.html)。不幸的是,这种方法迫使您将所有现有的JS代码覆盖到称为

等模块的新结构中
YUI.add('mymodule-uses-yui2', function(Y) {

    var YAHOO = Y.YUI2;
    /* my old JS code based on YUI 2 placed here */

}, '1.0', {requires: 'yui2-modules'});

然后在沙盒中使用该模块:

YUI().use('...', 'yui2-modules', 'mymodule-uses-yui2', function(Y) {
    var YAHOO = Y.YUI2;
});

这导致在现有代码库上进行大量工作以创建模块和正确的依赖。

我发现我可以在recatoring的第一阶段避免它:我一如既往地在脚本标记中静态加载所有YUI 2组件。在这种情况下,全局YAHOO对象随处可用,我的旧代码正常工作。然后我开始在我的旧代码附近使用YUI 3编写一个新代码(或重写旧代码) - 根本没有任何混淆!您也可以一步一步地将旧代码覆盖到新的时尚模块(YUI.add)中,并在那里使用全局YAHOO(不使用Y.YUI2)。而且您不需要强制所有权力一次将所有旧代码覆盖到新模块中。

我还发现SimpleYUI对我来说更有用,每次进入YUI()时使用沙盒。使用(...)因为当前我在页面上有很多地方需要一小段JS代码。 SimpleYUI做得更好,如果你在几个地方的页面上有代码而没有时间完全重构它。