最近我正在将我的项目从 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 做得更好,如果您在页面上的几个地方编写代码并且还没有时间完全重构它。