MooTools и конфликт jQuery - несмотря на безопасный режим доллара

Я пытаюсь заставить некоторый ранее существующий код 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 ответов

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

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

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

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

});

Странно, это не то, что должно происходить, если честно. Так как 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/ -> testcase

Почему ты не используешь 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 вместе с любым заказом, который я хочу.

Если мне нужно использовать оба, я сначала включаю jQuery, а затем Mootools (1.3). Если вам не нужно беспокоиться о jQuery, у него нет конфликтов, так как совместимость Mootools включается автоматически, а затем определите $ для Mootools и JQuery для быстрых ярлыков, т.е. (function($){ /*stuff*/ })(document.id) и т.п.

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

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