我从portlet加载yui.js 3.3.0版本文件,但是使用3.2.0 yui.js文件生活,
所以每当我加载那个页面时,js就会出现错误
G_ENV._loaded [VERSION]未定义 – 此错误发生在yui.js中,使用的是liferay 3.2.0版本.
所以它的替换值就像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
}
任何帮助都会被批评,任何人都会遇到这种问题.
谢谢
解决方法:
由于两个原因,升级,更改或覆盖Liferay中的本机YUI安装非常困难.一,Liferay 6.0的UI框架(Alloy)在YUI 3.2.0上运行.二,本机门户模板将合金ui实例化到全局YUI对象(YUI.AUI)上,这很糟糕,因为它使YUI框架与可怕的实现AUI紧密耦合.您的浏览器在YUI对象上调用此AUI引用,因为页面正在加载并且在window.onload事件之后.如果你试图替换或修改全局YUI对象,它会搞砸合金,Liferay的UI运行在上面.
由于升级是不可能的,下一个最好的选择是引入您想要使用的新YUI模块.另外,您可以试用内置3.4.1的Liferay 6.1 CE,但看起来它还处于beta测试阶段.
这是一个从YUI 3.4.1引入和使用dom-core模块并在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);
});
});