2013-07-28 3 views
1

Я использую jQuery's getScript() для загрузки отдельных файлов javascript. Файлы, кажется, загружаются нормально (я знаю это, когда я помещаю неправильный URL-адрес, он выдает ошибку - нет ошибки с правильным URL-адресом).jQuery getScript() не разрешает

Тем не менее, функция done() не работает. Консоль не записывается в журнал «done», и никакая из функций не вызвана.

(function($) { 
    $.when(
     $.getScript(templateUrl + "/assets/js/variables.js"), 
     $.getScript(templateUrl + "/assets/js/functions.js"), 
     $.getScript(templateUrl + "/assets/js/events.js"), 
     $.Deferred(function(deferred){ 
      $(deferred.resolve); 
     }) 
    ).done(function(){ 

     console.log("done"); 

     swapBackgroundImgs(); 
     singleLarge(); 
     bindFlexorder(); 
     bindSvgeezy(); 
     bindPlaceholder(); 
     preloadImages(); 

    }); 
})(jQuery); 

ответ

1

done обратного вызова никогда не срабатывает, потому что вы явно создали Deferred и никогда не решить ее. $.when ждет все обещаний, которые будут разрешены.

код у вас есть в вашем $.Deferred:

$(deferred.resolve); 

... запланирует Deferred «s resolve функцию как ready обратного вызова, но функция будет вызвана с неправильным this (document, а не Deferred объект; больше: Mythical methods), что, вероятно, заставляет его выбросить ошибку ready buries.

Просто удалить что $.Deferred полностью, или если ваша цель состоит в том, чтобы ждать ready, убедитесь, что this получает правильно установить при вызове resolve:

$.Deferred(deferred) { 
    $(function() { 
     deferred.resolve(); 
    }); 
}) 

или:

$.Deferred(deferred) { 
    $($.proxy(deferred.resolve, deferred)); 
}) 

или, но к сведению комментарий:

$.Deferred(deferred) { 
    // Deprecated in jQuery 1.8 
    $(document).on("ready", deferred, "resolve"); 
}) 
+0

То, что вы сказали, имеет смысл. Я узнал о нескольких getScript() из [этого стека] (http://stackoverflow.com/a/11803418/997596), поэтому мой код был таким. Я удалил '$ .Deferred', но все же ничего в' done() 'не вызвано. Будет ли это иметь какое-либо отношение к оболочке функции jQuery? – Fisu

+0

@tommyf: Это не из-за оболочки в коде, который вы указали, но если вы также используете эту оболочку в загружаемых скриптах, то да: функции в этих сценариях не будут доступны, потому что они 'd быть красиво обернутым в функции обзора. Вам нужно было бы сделать их доступными как-то, возможно, через один общий объект, доступный как глобальная переменная ('var App = {};', и затем они добавят себя в 'App'), или если они поднимут событие на существующий глобальный ('document.body'), который передает ссылку на них слушателям. –

+0

загруженные сценарии развернуты. Через веб-инспектора я вижу, что загруженные сценарии доступны для просмотра в каталоге 'XHRs'. Доступны ли они оттуда? – Fisu

Смежные вопросы