我正在努力将 YUI2 代码更改为 YUI 2-in-3 形式。 我需要在我的JS代码中访问Y.YUI2对象(YAHOO对象)。
我全局需要这个对象,因为这个对象在 JS 代码中的数百个地方使用,所以我想要一种更简单的方法来访问它,而不是每次需要它时都通过回调访问它。因为我只有一个 HTML 文件应该有一个更简单的方法。
我正在使用 SimpleYUI。 所以我的主要目标是使全局 Y 对象获得 YUI2 值。我无法通过 Y.use(.....) 来做到这一点,因为 use() 不会阻止其余代码以及它下面的代码需要雅虎对象。
谢谢
最佳答案
最近我正致力于将我的项目从 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 会做得更好。
关于yui 2 到 yui-2-in-3,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9490709/