Mootools与Richfaces模态面板冲突

时间:2014-10-30 05:58:21

标签: richfaces mootools mootools1.2

我们在项目中使用Mootools以及JSF Richfaces来构建应用程序组件。我们需要使用richfaces模式面板在会话超时时显示警报。但是当Mootools和富人面孔模态面板一起使用时,我们会收到一些错误,这些错误指向与两者使用的prototype.js冲突。

我在浏览器控制台中可以看到的错误如下:

  

Uncaught TypeError:undefined不是函数localhost:8080 / ca /​​ faces / a4j / g / 3_3_3.Finalorg.ajax4jsf.javascript.PrototypeScript:46   未捕获的TypeError:非法调用localhost:8080 / ca /​​ faces / a4j / g / 3_3_3.Finalorg.ajax4jsf.javascript.PrototypeScript:31   未捕获的TypeError:非法调用localhost:8080 / ca /​​ faces / a4j / g / 3_3_3.Finalorg.ajax4jsf.javascript.PrototypeScript:265

对这个问题的任何提示/灵魂都非常感激。

〜Ragesh

1 个答案:

答案 0 :(得分:4)

之前已多次说过这个。所以让我们再做一次:

你不能一起运行Mootools和Prototype.js。永远。这是不可能的。

为什么?

两者都是原型 - 即它们通过添加或更改数组,函数,数字,字符串,元素等原型来扩展本机类型。

尽管像jQuery包装/链方法这样的库在$这样的单个入口点后面,允许你使用noConflict /闭包等,但你不能在同一个名称上使用多个方法实现普通类型的原型。

实际上,如果说,String.prototype.contains的MooTools实现与Prototype 1(以及ES6)的实现不同,它将破坏您的MooTools代码或原型代码,具体取决于最后加载的代码。此外,ES6实施没有受到保护,并被MooTools覆盖(用于修改)。

最后加载并不能确保一切正常。如果脚本有类似的检查:

if (!String.prototype.trim) String.prototype.trim = function(){ ... }; 

...并且期望是如果它在那里,它必须是本机规范实现,它也删除诸如 之类的东西,然后框架不会重新定义它。所以,即使它看起来像是在工作,你也可能会遇到意想不到的行为并且难以捕捉到错误。

tl; dr:不要使用两个框架或者至少使用jquery +两个中的一个。原型框架使用起来并不安全,并且已经变得无法实现 - MooTools和Prototype都比jQuery更强大,但却失去了战争,因为它们更难维护并与其他人的代码一起使用。