2

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

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

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

谢谢

4

1 回答 1

2

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

首先,我猜你把这篇文章发红了:“Working with 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;
});

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

我发现我可以在恢复的第一阶段避免它:我像往常一样继续在脚本标签中静态加载所有 YUI 2 组件。在这种情况下,全局 YAHOO 对象随处可用,而我的旧代码可以正常工作。然后我开始在旧代码附近使用 YUI 3 编写新代码(或重写旧代码) - 完全没有冲突!您还可以逐步将旧代码覆盖到新的时尚模块(YUI.add)中,并且仍然在那里使用全局 YAHOO(不使用 Y.YUI2)。而且您不需要强迫所有的力量一次将所有旧代码覆盖到新模块中。

我还发现 SimpleYUI 对我来说比每次都进入 YUI().use(...) 沙箱更有用,因为目前我在页面上有很多地方我只需要一小段 JS 代码。SimpleYUI 做得更好,如果您在页面上的几个地方编写代码并且还没有时间完全重构它。

于 2012-03-26T11:27:06.313 回答