DOM-расширения прототипа вступают в конфликт с сторонней библиотекой JS - какая моя лучшая ставка - PullRequest
0 голосов
/ 21 августа 2009

Я потратил почти 2 часа на отладку сторонней библиотеки JavaScript только для того, чтобы найти, что массив, который я передаю этой библиотеке, преобразуется в строку где-то вниз по трубе ... Я не знаю, почему или как это происходит но как только я удаляю Prototype из моего проекта, все снова работает нормально.

Может ли это быть из-за Прототипа, расширяющего DOM? Какой мой лучший вариант? Я использую в своем проекте итераторы элементов Prototype, DOM-манипуляции, метод bind () и строковые манипуляторы, и я бы не стал их терять.

Есть ли библиотека, которая имеет все это, но которая отлично работает с библиотеками JS сторонних производителей, чувствительными к расширениям DOM?

Ответы [ 3 ]

2 голосов
/ 21 августа 2009

Работая с Prototype ранее, невозможно заставить его "играть красиво" (сродни режиму jQuery noConflict).

Сам подход за Prototype предотвращает это. Хлеб и масло Prototype происходит из его метода Object.extend (), который вызывается для объектов, как только вы манипулируете ими с помощью методов Prototype. Не говоря уже о том, что Prototype также изменил основные объекты JavaScript, прежде чем связываться с вашими.

С другой стороны, jQuery полностью самодостаточен в объекте jQuery (что, насколько мне известно, все, что он добавляет в пространство имен JavaScript, когда включено).

Существуют ли другие библиотеки с похожими функциями? Конечно, на самом деле, и я уверен, что вы уже устали слышать это, но вы, вероятно, могли бы сделать большую часть этого с помощью jQuery. Однако вы не избежите неизбежного: переписывания кода. Это не будет сделано таким же образом с любой другой платформой, не говоря уже о том, чтобы дать вам те же результаты / поведение.

Ваш выбор таков:

  • Удалите прототип и переписайте материал, который использовал его, чтобы использовать что-то еще
  • Отбросьте стороннюю библиотеку в пользу альтернативы или отсутствия целиком
  • Переписать prototype.js или thirdpartytool.js для хорошей игры (это, конечно, ужасный хак, который вызовет больше головной боли, если вы захотите «обновить» один или оба инструмента в будущем, когда выйдет новый релиз) вне)
0 голосов
/ 08 февраля 2010

Немного горького опыта.

Я только что закончил писать свой собственный фреймворк для приложений XUL (мне просто нужно что-то вроде компонентной модели без какой-либо сладости $ или прототипа lib). Это очень маленький, удобный и простой. Но ... Только сейчас, когда все готово для использования фреймворка, я обнаружил, что он абсолютно мертв в контексте XUL. Основным препятствием является то, что движок JavaScript отменяет все ваши изменения в базовых объектах, таких как функция, объект и т. Д. . Таким образом, ключевые расширения, которые заставляют вещи работать & mdash; f.x. Function.prototype.toClass, override и другие & mdash; невидимы вне файла, в котором они определены.

0 голосов
/ 21 августа 2009

У меня был успех с jQuery . Если вы позвоните jQuery.noConflict(), он будет очень хорошо работать с другими библиотеками JS.

...