由于两个原因,升级、更改或覆盖 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);
});
});