Мар
06
|
Как “подружить” Prototype и jQuery в одном проекте
|
Давно не писал ничего на тему программирования и вообще о вебе (все-таки блог не только о фрилансе).
Так вот недавно в одном из моих проектов возникла надобность использовать одно из готовых решений - плагин контекстного меню (того, что выпадает по клику правой клавишей мышки) в jQuery.
К сожалению (или к счастью) весь проект был построен на Prototype, а выдумывать велосипед заново желания не было (тоесть писать на Prototype то, что уже есть готовым в jQuery), поэтому я начал гуглить по поводу того, как “скрестить бобра и носорога”.
В итоге решение было найдено (сейчас даже уже не помню где именно, важен сам факт) в одном из англоязычных блогов (жаль ссылка утеряна во времени…) и состояло оно в том, чтобы включить jQuery в режим “безконфликтности” (да, да, разработчики побеспокоились о том, чтобы другие библиотеки могли спокойно работать совместно с их детищем):
<script type="text/javascript"> $j = jQuery.noConflict();</script>
И далее везде для Prototype применяется и дальше знак $, а для jQuery - $j. После этого мне достаточно было в файле плагина все $ заменить на $j, подключить jQuery к проекту - и все заработало как мне того и хотелось.
Возможно мой опыт будет кому-то полезен в их проектах.
06.03.2008 в 19:03
Вообще-то код плагинов имеет вид:
(function($){
// ... собственно реализация
})(jQuery);
И для плагина объект jQuery всегда будет доступен по $, поэтому в файле плагина ничего менять не надо было.
06.03.2008 в 19:09
DeveloperGuru.NET, посмотрите:
http://www.trendskitchens.co.nz/jquery/contextmenu/jquery.contextmenu.r2.js - код этого плагина содержал в конце еще и
$(function() {
$(’div.contextMenu’).hide();
});
Поэтому совместно не работало, пришлось переименовывать. А так, как с jQuery я не сильно знаком, поэтому решил просто сразу все вхождения $ заменить.
Возможно Вы и правы и этого делать не нужно было везде, я не проверял.
Но суть ведь не в том, как подключить какой-то плагин, а в том, чтобы две библиотеки смогли работать одновременно и можно было писать код и для jQuery и для Prototype и использовать сильные стороны обеих библиотек.
06.03.2008 в 19:15
Вот в
$(function() {
$(’div.contextMenu’).hide();
});
надо было заменить (это уже не плагин), а в самом плагине можно было не менять.
Я вообще понимаю, что это надо было сделать срочно и времени на разбирательства небыло и сам бы сделал так же, если бы не знал.
Просто даю информацию на будущее, т.к. сам недавно с этими вещами разбирался.
06.03.2008 в 19:27
DeveloperGuru.NET, естественно. В синтаксис библиотеки не было желания вникать, к тому же я всегда использую Prototype
Насчет информации - большое спасибо
07.03.2008 в 07:44
Слух режет.
07.03.2008 в 11:31
По-моему функция noConflict() довольно подробно в документации самого jQuery описана. Кстати, кто знает преимущества Prototype перед jQuery и наоборот. Я например уже года два JQuery использую (практически с нулевой версии), и на мой взгляд больше библиотек и не надо никаких.
07.03.2008 в 14:43
Артем, она-то описана, только что делать тем, что c jQuery не знаком или знаком поверхностно?
А насчет jQuery vs Prototype - это холивар, которого можно найти много в интернете, каждый использует то, что ему больше нравится.
07.03.2008 в 15:03
DenTal, спасибо, исправлено.
28.04.2008 в 23:14
Спасибо большое!
Очень просто было сделать, как Вы написали)))
Супер!!! Все работает!!!
12.08.2008 в 21:32
Хм… Вот так всегда… Ковыряешь, ковыряешь - а нужно только одну строчку кода вписать…
БЛИН!
05.01.2009 в 12:18
о великий гуру , пиши и дальше животворящие статьи для еникейщиков иначе без опыта к ошибкам тип $.browse.msie што там такое , просто ни подступится.
02.06.2009 в 10:16
Спасибо автору. Мне помогло Было актуально когда я использовал плагин к CMS, который работал на Prototype, а мой собственный скрипт работал на JQuery.
16.07.2009 в 15:12
А глаза норм? В порядке? Читаю и переживаю за Вас..