Почему jQuery UI не видит jQuery? - PullRequest
7 голосов
/ 13 декабря 2010

Я создал JavaScript-виджет, который должен быть встроен в любой сторонний сайт в любой среде.Виджет опирается на jQuery и jQuery UI.Я следовал инструкциям в Как встроить Javascript-виджет, который зависит от jQuery, в неизвестную среду для ответственного добавления jQuery - отлично подходит для встраивания jQuery.Но когда я пытаюсь добавить JQuery UI, это не удается.Вот код:

(function(window, document, version, callback) {
  var j, d;
  var loaded = false;
  if (!(j = window.jQuery) || version > j.fn.jquery || callback(j, loaded)) {
    var script = document.createElement("script");
    script.type = "text/javascript";
    script.src = "https://ajax.googleapis.com/ajax/libs/jquery/1.4.4/jquery.min.js";
    script.onload = script.onreadystatechange = function() {
        if (!loaded && (!(d = this.readyState) || d == "loaded" || d == "complete")) {
            callback((j = window.jQuery).noConflict(1), loaded = true);
            j(script).remove();
        }
    };
    document.documentElement.childNodes[0].appendChild(script)
  }
})(window, document, "1.3.2", function($, jquery_loaded) {
    $.getScript('http://ajax.googleapis.com/ajax/libs/jqueryui/1.8/jquery-ui.js', function(){
      console.log('loaded');
    });
});

Когда я запускаю это, я получаю «загруженное» сообщение, за которым следует ошибка, говорящая, что «$ is undefined» в строке 15 jquery-ui.js.Но как $ может быть неопределенным, когда я использую $ .getScript () для загрузки пользовательского интерфейса jQuery?И почему я вижу сообщение «загружено» до того, как получаю ошибку?Согласно документации jQuery, getScript не должен выполнять обратный вызов до тех пор, пока скрипт не будет загружен и выполнен.

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

1 Ответ

7 голосов
/ 13 декабря 2010

Вызывая .noConflict(1), так же как и .noConflict(true), вы удаляете jQuery, просто удалите 1. Аргумент true для .noConflict() указывает jQuery удалить не только $, но и window.jQuery, который пользовательский интерфейс jQuery пытается использовать впоследствии, когда он загружается.

Вы можете проверить это здесь , смотрите, что в консоли нет ошибок.

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