mootools: $ не определено - PullRequest
2 голосов
/ 14 марта 2010

У меня странная ошибка, я не понимаю. Я просто перенес свой код из jQuery в Mootools, потому что он намного чище, чем беспорядок в jQuery.

Теперь, когда я использую

$$('div.canvas')

в mootools я получаю правильный элемент.

Когда я пытаюсь

$(document).getElement('div.canvas')

это говорит мне, что $ не определено. Как можно определить $$ и все вспомогательные функции, например $ lambda и т. Д., Но не $ ?

Что-то изменилось там с 1.1 до 1.2 и документы еще не обновлены?

Ответы [ 4 ]

2 голосов
/ 14 марта 2010

, как кто-то указал, когда $ определено, mootools 1.2.3+ не перехватит его, вместо этого он вернется к использованию document.id. Раньше этого выпуска не было, поэтому это во многом зависит от версии, на которую вы ссылаетесь. но это, безусловно, изменилось с 1.11, и это задокументировано, прочитать объявление здесь http://mootools.net/blog/2009/06/22/the-dollar-safe-mode/

для вашего приложения это означает, что если ваша структура ...

Загрузить JQuery (не нужно noconflict, не имеет значения)
загрузить mootools

... это может работать следующим образом:

$("#foo"); // jquery
document.id("foo"); // mootools

// or create a temporary scope for mootools things
(function($) {
    $("foo"); // mootools
})(document.id);

лучшие / последние практики в разработке mootools требуют наличия плагинов и кода, выпущенных для ссылки на document.id, или должны быть в пределах такого закрытия для обеспечения совместимости. это на самом деле нормально, в отличие от jquery, где $ aliases - синглтон jQuery, в mootools $ - просто селектор, поэтому его использование будет гораздо менее распространено. Следовательно, печатать document.id («селектор») не так уж сложно.

2 голосов
/ 14 марта 2010

Если вы используете обе библиотеки на одной странице, вы должны использовать функцию noConflict () JQuery

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

Если у вас все еще возникают проблемы, попробуйте проверить включенные файлы JQuery, чтобы убедиться, что любые плагины / код используют jQuery('div.canvas') и т. Д. Вместо $, поскольку $ был выпущен функцией noConflict () и не запустить код JQuery.

1 голос
/ 14 марта 2010

MooTools не будет переопределять функцию $, если она уже существует. Он проверяет нулевое значение $, прежде чем определить его. Поэтому я подозреваю, что $ все еще где-то скрывается.

if (window.$ == null) Window.implement({
    $: function(el, nc){
        return document.id(el, nc, this.document);
    }
});

После включения jQuery и запуска $.noConflict();, но до включения MooTools, вы можете записать содержимое $ и посмотреть, что в нем регистрируется?

include jquery
$.noConflict();
console.log($); // should return undefined
include mootools
1 голос
/ 14 марта 2010

Вы удалили все ссылки на jQuery в ваших htmls?

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