我正在努力将YUI2代码更改为YUI 2-in-3格式。 我需要在我的JS代码中访问Y.YUI2对象(YAHOO对象)。
我需要全局这个对象,因为这个对象在JS代码的数百个地方使用,所以我想要一种更简单的方法来访问它,而不是每次我需要时通过回调访问它。因为我只有一个HTML文件应该有一个更简单的方法。
我正在使用SimpleYUI。 所以我的主要目标是使全局Y对象获得YUI2值。我不能通过Y.use(.....)来做到这一点,因为use()不会阻塞其余代码并且需要下面的代码YAHOO对象。
由于
答案 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做得更好,如果你在几个地方的页面上有代码而没有时间完全重构它。