Я часто загружаю виджеты, которые я пишу так:
$(window).load(function () {
doStuff();
});
Это часто бывает, когда я пишу виджеты, которые зависят от остальной части приложения, которое должно быть инициализировано.
Недавно я начал использовать RequireJS и не могу понять, как подключить обратный вызов, как в приведенном выше коде. Я посмотрел и попробовал плагин domReady, но он не будет соответствовать моему прецеденту, так как обратные вызовы вызывается, когда DOM готов, а не когда загружаются все ресурсы.
Вот что я пробовал до сих пор:
// Using domReady (main.js):
require(['require', 'domReady'], function (require, domReady) {
'use strict';
domReady(function () {
require(['app'], function (App) {
console.log(window);
App.initialize();
});
});
});
// Using jQuery (main.js)
// Note, this does not work.
require(['jquery', 'app'], function ($, App) {
'use strict';
$(window).load(function () {
App.initialize();
});
});
Учитывая вышеизложенное, каков правильный способ достижения использования $(window).load()
с RequireJS?
Если вы правильно поняли, вы можете проверить метод $.holdReady()
для достижения результата; поэтому сразу после загрузки jquery run
jQuery.holdReady(true);
позже присоедините свои обработчики, которые должны запускаться только после загрузки с помощью
jQuery(function($) {
App.initialize(); //will run only after window.load;
}
и в настройке вашего загрузчика:
jQuery(window).load(function () {
jQuery.holdReady(false); //fire all domready holded events
});
jQuery.holdReady(false);
в обратном вызове RequireJS для всех загруженных сценариев или создайте небольшой массив наблюдения, который будет проверен, чтобы убедиться, что load () и этот обратный вызов запущены, когда оба запускаются, освобождают удержание domready. Пожалуйста, немного поиграйтесь с неприятностями, потому что я не знаю, как вы используете load ().