Portlet 中的 YUI 版本冲突问题

2023-12-03

我正在从 portlet 加载 yui.js 3.3.0 版本文件,但 liferay 使用 3.2.0 yui.js 文件, 所以每当我加载该页面时,就会出现 js 错误

G_ENV._loaded[VERSION] 未定义 - 此错误出现在 yui.js 中,yui.js 使用的是 3.2.0 版本的 liferay。

所以它的替换值如 G_ENV._loaded[3.2.0] 并且会抛出一个错误,因为我们从 portlet 加载了 3.3.0 版本。

我在 portlet 中替换了 yui.js 3.2.0 版本文件,但它引发了一些其他 js 错误。

它在 3.2.0 中如何工作,或者有什么方法可以更新现有版本的 yui?

这是 yui.js 的代码,该行抛出错误

                      if (!G_ENV._loaded[VERSION][name]) {
                            missing.push(name);
                        } else {
                            used[name] = true; // probably css
                        }

任何帮助将不胜感激,任何人都遇到过这种问题。

Thanks


由于两个原因,升级、更改或覆盖 Liferay 中的本机 YUI 安装极其困难。一、Liferay 6.0的UI框架(Alloy)运行在YUI 3.2.0上。第二,原生门户模板将合金ui实例化到全局YUI对象(YUI.AUI)上,这很糟糕,因为它使YUI框架与可怕的 AUI 实施。当页面加载时以及 window.onload 事件之后,您的浏览器在 YUI 对象上调用此 AUI 引用。如果您尝试替换或修改全局 YUI 对象,则会搞砸运行 Liferay 的 UI 的 Alloy。

由于升级是不可能的,下一个最佳选择是仅引入您想要使用的新 YUI 模块。另外,您可以尝试 Liferay 6.1 CE,它内置了 3.4.1,但看起来仍处于 beta 测试阶段。

下面是一个从 YUI 3.4.1 引入并使用 dom-core 模块并在 Liferay 6 中使用它的示例,Liferay 6 在 YUI 3.2.0 上运行。我从 YUI 的文档中得到了关于如何将 YUI 2 模块引入 3 的想法(http://yuilibrary.com/yui/docs/yui/yui-loader-ext.html)。要快速找出每个模块的依赖关系,您可以使用 YUI 的在线配置器http://yuilibrary.com/yui/configurator/.

var config = {
ignore : ["skin-sam-overlay","skin-sam-widget","skin-sam-widget-stack","skin-sam-tabview"],
groups: {
    yui341: {
        base: '/js/yui-3.4.1/build/',
        modules:  {
            yui341_yui_base: {
                path: 'yui-base/yui-base.js'
            },
            yui341_oop: {
                path: 'oop/oop.js',
                requires: ['yui341_yui_base']
            },
            yui341_features: {
                path: 'features/features.js',
                requires: ['yui341_yui_base']
            },
            yui341_dom_core: {
                path: 'dom-core/dom-core.js',
                requires: ['yui341_yui_base','yui341_oop','yui341_features']
            }
        }
    }
}
};

YUI(config).use('yui341_dom_core',function(Y){
    //YUI 3.4.1 config modules are now accessable through 'use' call
    console.log(Y.version);  //say hello to the newer version (3.4.1)
    Y.use('dom-core',function(Y){
        //Finally have access to native 3.4.1 module
        console.log(Y.DOM);
    });
});
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Portlet 中的 YUI 版本冲突问题 的相关文章

随机推荐