【问题标题】:Mootools conflict with Richfaces modal panelMootools 与 Richfaces 模态面板冲突
【发布时间】:2014-12-26 01:59:41
【问题描述】:

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

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

Uncaught TypeError: undefined is not a function localhost:8080/ca/faces/a4j/g/3_3_3.Finalorg.ajax4jsf.javascript.PrototypeScript:46 未捕获的类型错误:非法调用 localhost:8080/ca/faces/a4j/g/3_3_3.Finalorg.ajax4jsf.javascript.PrototypeScript:31 未捕获的类型错误:非法调用 localhost:8080/ca/faces/a4j/g/3_3_3.Finalorg.ajax4jsf.javascript.PrototypeScript:265

非常感谢您对问题的任何提示/解决方案。

~拉格什

【问题讨论】:

  • 谢谢塞尔吉奥。该错误没有给出任何关于它中断的确切位置的提示。但是当我删除了rich:modalPanel 组件时,它就可以工作了。这让我认为它与在 Mootools 和 richfaces.js 中使用的 Prototype.js 存在冲突问题。如果您需要更多说明,请告诉我。

标签: richfaces mootools mootools1.2


【解决方案1】:

这已经说过很多次了。所以让我们再做一次:

你不能同时运行 Mootools 和 Prototype.js。曾经。这是不可能的。

为什么?

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

虽然像 jQuery 之类的库在 $ 这样的单个入口点后面封装/链接方法,允许您使用 noConflict/闭包等,但您不能在通用原型上拥有多个具有相同名称的方法实现输入。

实际上,如果说String.prototype.contains 的 MooTools 实现不同于原型版本(和 ES6 版本),它将破坏您的 MooTools 代码或原型代码,具体取决于最后加载的代码。此外,ES6 实现没有受到保护,并且被 MooTools 覆盖(例如)。

最后加载也不能确保一切正常。如果脚本有这样的检查:

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

...并且期望如果它在那里,它必须是本机规范实现,它还删除了诸如   之类的东西,然后框架不会重新定义它。因此,即使它看起来可以正常工作,您也可能会遇到意外行为并且难以发现错误。

tl;dr:不要使用两个框架或至少使用 jquery + 两者之一。 Prototypal 框架使用起来并不安全,而且已经过时了——MooTools 和 Prototype 都比 jQuery 更强大,但他们输掉了这场战争,因为它们更难维护和与其他人的代码一起使用。

【讨论】:

    猜你喜欢
    • 2013-10-21
    • 1970-01-01
    • 1970-01-01
    • 2012-02-11
    • 1970-01-01
    • 1970-01-01
    • 2017-05-15
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多