Как избежать конфликтов в расширениях jQuery и jQuery! - PullRequest
2 голосов
/ 04 июля 2010

Я использую jQuery и некоторые очень распространенные плагины jquery в расширениях CMS (включая jQueryUI и jQueryTools вместе со многими другими) в некоторых расширениях CMS, которые используются многими людьми в самых разных ситуациях.Я всегда сталкиваюсь с проблемами, когда возникают конфликты между плагинами моего расширения и плагинами, добавленными другим расширением на той же странице CMS.Иногда другое расширение загружает более раннюю версию плагина jQuery и убивает мой экземпляр.

Я хочу "переименовать" или "обернуть" (в один плагин с уникальным именем) все плагины, которые являются моими расширениямииспользуйте, чтобы мой экземпляр не был затронут каким-либо образом, даже если на той же странице присутствуют другие экземпляры таких же плагинов.

Если все это возможно, оборачивание всех плагинов в один плагин было бы идеальным решением.вместо переименования.

Есть предложения, возможно ли это?

Спасибо большое, Норман.

Ответы [ 2 ]

3 голосов
/ 04 июля 2010

Вы можете заключить плагины в анонимную функцию и вызывать их с определенной версией jquery.

Пример:

<script src="jquery-1.3.js"></script>
<script>
  $jq13 = jQuery.noConflict(true);
</script>

<script src="jquery-1.4.js"></script>
<script>
  $jq14 = jQuery.noConflict(true);
</script>

<script>
  (function($){
    // All references to $ in this block will refer to $jq14
    // Put plugins inline here
  })($jq14);
</script>

Хорошо написанные плагины уже будут написаны таким образом, поэтому вы можете просто изменить последнюю строку, чтобы указать, какой объект jquery он должен использовать.

Или вы можете изменить window.jquery перед вызовом каждого плагина. Как это:

<script src="jquery-1.3.js"></script>
<script>
  $jq13 = jQuery.noConflict(true);
</script>

<script src="jquery-1.4.js"></script>
<script>
  $jq14 = jQuery.noConflict(true);
</script>

<script>
  window.jQuery = $jq14;
</script>
<script src="some_plugin.js"></script>

<script>
  window.jQuery = $jq13;
</script>
<script src="some_other_plugin.js"></script>

Немного менее элегантно, но должно работать.

0 голосов
/ 04 июля 2010

Может быть, здесь вы можете найти ответ?

Две версии jQuery на одной странице

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...