Конфликты MooTools и jQuery - несмотря на безопасный режим Dollar - PullRequest
1 голос
/ 11 мая 2010

Я пытаюсь заставить некоторый ранее существующий код MooTools нормально функционировать на сайте Drupal. Я знаю, что код MooTools работает сам по себе. Когда я загружаю библиотеку MooTools на странице, jQuery перестает работать.

Я включаю MooTools после jQuery, что (по мнению разработчиков MooTools) должно препятствовать тому, чтобы Moo украл уже определенный $ из уже загруженной библиотеки jQuery.

Я преобразовал все ссылки на $ в моем коде Moo в document.id.

Когда я загружаю страницу, код Moo работает, а код jQ - нет. Похоже, что Moo все еще крадет переменную $ у jQ и переопределяет ее для себя. В целях тестирования загружаемый код Moo представляет собой простой скрипт 12 Accordion. Есть более сложные, которые мне нужно использовать, если я решу эту проблему.

Drupal широко использует jQuery, поэтому использование режима no_conflict в jQ нецелесообразно. Из того, что я понимаю, это должно быть возможно при условии безопасного режима доллара.

Я использую MooTools Core 1.2.4 и MooTools More 1.2.4.4 и jQuery 1.2.6 (также пробовал 1.4.2).

Ответы [ 5 ]

3 голосов
/ 11 мая 2010

Вместо использования $ для доступа к функциям jQuery вы всегда можете использовать jQuery().

Вы даже можете передать свой собственный идентификатор при использовании .ready(), например:

jQuery(document).ready(function(myIdentifier){

   myIdentifier(); // this is the jQuery reference!

});
3 голосов
/ 12 мая 2010

Странно, это , а не что-то, что должно происходить, если честно. Поскольку mootools 1.2.3 (?) (Возможно, был 1.2.1), он НЕ будет принимать присвоение $, если оно уже определено на странице. То есть, если порядок загрузки такой, как описано:

JQuery MooTools

... тогда moootools автоматически перейдет в режим совместимости и вернется к document.id. Единственный случай, когда это не будет истиной, - это если jquery загружается в режиме noConflict, что помешает ему назначить jQuery для $ и не даст повода mootools не захватывать его.

Во всяком случае, это теория. Если вы видите другое поведение, значит, с браузером что-то не так. Вы лениво загружаете или неблокируете / параллельно загружаете скрипты?

Обычно здесь рекомендуется оставлять jquery в собственном режиме (без noConflict) и переназначать $ на document.id, чтобы позаботиться о mootools в такой области видимости:

<div id="foo"></div>

, а затем:

$("#foo"); // jquery

(function($) {
    $("foo"); // mootools.
})(document.id);

В последнее время было множество вопросов по этому вопросу, просто прочитайте последние вопросы о mootools. в противном случае, пожалуйста, опубликуйте URL вашего проекта.

Очевидно, что вы можете console.log ($) проверить / подтвердить это: http://www.jsfiddle.net/AxVqy/ -> контрольный пример

1 голос
/ 11 октября 2010

почему бы вам не использовать jQuery вместо $? если по какой-либо причине вы не можете этого сделать, то noConflict(); не означает, что вам нужно прекратить использовать $ для jQuery, вы можете сделать что-то вроде этого:

<script type="text/javascript" src="mootools.js"></script>
<script type="text/javascript" src="jquery.js"></script>
<script type="text/javascript">
  $.noConflict();
  jQuery(document).ready(function($) {
    // Code that uses jQuery's $ 
  });
  // Code that uses mootools $ 
</script>

Вы, вероятно, испытываете проблемы при использовании jQuery с плагинами, просто замените их $(function(){} на jQuery(document).ready(function($) {});

обратите внимание, что сначала я загрузил mootools, вы также можете сделать что-то подобное в каждой части кода:

(function($) {
    $("id"); // mootools.
})(document.id);


(function($) {
    $("#id"); // jQuery.
})(jQuery);

У меня похожая проблема с поиском решения для загрузки всех или одной или любой комбинации разных библиотек. Как только я пойму, как это сделать, я уверен, что смогу поделиться этим с вами, и вы определенно сможете это сделать. но вышеприведенные решения должны работать для вас, мне уже удалось использовать это для загрузки jQuery и mootools вместе с любым заказом, который я хочу.

0 голосов
/ 15 декабря 2010

Если мне нужно использовать оба, я сначала включаю jQuery, а затем Mootools (1.3). Если вам не нужно беспокоиться о jQuery, он не конфликтует, так как совместимость Mootools включается автоматически, тогда определите $ для Mootools и jQuery для быстрых ярлыков, т.е.

0 голосов
/ 11 мая 2010

Это зависит больше от плагинов, используемых в вашем случае. Сам jQuery может работать нормально, но если плагин не написан по их рекомендации, он не будет работать.

...