Mootools конфликтуют с модальной панелью Richfaces
Мы используем Mootools в нашем проекте, а также JSF Richfaces для создания компонентов приложения. У нас есть требование использовать модальную панель richfaces, чтобы показывать предупреждение по истечении времени сеанса. Но когда и Mootools, и модальная панель rich face используются вместе, мы получаем некоторые ошибки, которые указывают на конфликт с prototype.js
используется обоими.
Ошибка, которую я вижу в консоли браузера, выглядит следующим образом:
Uncaught TypeError: undefined не является функцией localhost:8080/ca/face /a4j/g/3_3_3.Finalorg.ajax4jsf.javascript.PrototypeScript:46 Uncaught TypeError: Недопустимый вызов localhost: 8080 / ca / face /a4j/g/3_3_3.Finalorg.ajax4jsf.javascript.PrototypeScript:31 Uncaught TypeError: Недопустимый локальный вызов: 8080 / ca / Faces/a4j/g/3_3_3.Finalorg.ajax4jsf.javascript.PrototypeScript:265
Любые советы / подсказки к проблеме высоко ценятся.
~ Ragesh
1 ответ
Это было сказано много раз раньше. так что давайте сделаем это еще раз:
Вы не можете запускать Mootools и Prototype.js вместе. Когда-либо. это невозможно.
Зачем?
Оба являются прототипами - то есть они расширяют нативные типы, добавляя или изменяя прототипы таких вещей, как Массив, Функция, Число, Строка, Элемент.
Принимая во внимание, что такие библиотеки, как jQuery-методы обтекания / цепочки позади одной точки входа $
, позволяя вам использовать noConflict
/ closures и т. д. вы не можете иметь более одной реализации метода с одним и тем же именем в прототипе общего типа.
на самом деле, если, скажем, реализация MooTools String.prototype.contains
отличается от Prototype 1 (и ES6), он сломает либо ваш код MooTools, либо ваш код прототипа, в зависимости от того, какой из них был загружен последним. Кроме того, реализация ES6 не была защищена и перезаписывалась MooTools (для страховки).
Загрузка последней не гарантирует, что все будет работать. Если в скрипте есть проверка вроде:
if (!String.prototype.trim) String.prototype.trim = function(){ ... };
... и ожидается, что если он есть, то это должна быть нативная реализация спецификации, которая также удаляет такие вещи, как
и т.д., тогда фреймворк не будет его переопределять. так что даже если это выглядит так, как будто это работает, вы можете получить неожиданное поведение и трудно поймать ошибки.