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(){ ... }; 

... и ожидается, что если он есть, то это должна быть нативная реализация спецификации, которая также удаляет такие вещи, как   и т.д., тогда фреймворк не будет его переопределять. так что даже если это выглядит так, как будто это работает, вы можете получить неожиданное поведение и трудно поймать ошибки.

tl; dr: не используйте две структуры или, по крайней мере, используйте jquery + один из двух. Прототипные фреймворки небезопасны в использовании и стали недоступны для использования - и MooTools, и Prototype более мощные, чем jQuery, и все же они проиграли войну, потому что их сложнее поддерживать и использовать с кодом других людей.

Другие вопросы по тегам