Есть requirejs для запуска обратного вызова при загрузке модуля
Мне нужно загрузить CSS, когда мой модуль загружен, поэтому я сделал это так, используя shims:
function loadCss(url) {
var link = document.createElement("link");
link.type = "text/css";
link.rel = "stylesheet";
link.href = url;
document.getElementsByTagName("head")[0].appendChild(link);
}
requirejs.config({ paths: paths, shim: {
'easyzoom': {
'deps': ['jquery'],
init: function () { loadCss('/lib/easyzoom/css/easyzoom.css'); }
}}
});
Это работает для других библиотек, таких как Datatables, потому что они не являются модулями Amd. Но для модулей Amd requireJs не ищет прокладки, поэтому не вызовет мою функцию инициализации.
Есть ли способ вызвать обратный вызов после загрузки модуля? Или загрузить модуль Amd, так как это был обычный файл javascript для поиска прокладок?
1 ответ
Определение shim
для правильного модуля AMD (тот, который вызывает define
) приводит к неопределенному поведению.
Что вы можете сделать, это использовать map
следующее:
map: {
'*': {
easyzoom: 'easyzoom-intercept'
},
'easyzoom-intercept': {
easyzoom: 'easyzoom'
}
}
Что это делает, это указать, что, когда любой модуль ('*'
) требуется модуль easyzoom
модуль easyzoom-intercept
должен быть загружен вместо Однако когда easysoom-intercept
хочет загрузить easyzoom
модуль easyzoom
должен быть загружен. Затем вы создаете easyzoom-intercept
Модуль, как это:
define([easyzoom], function (ez) {
loadCss('/lib/easyzoom/css/easyzoom.css');
return ez;
});
Этот код будет выполнен, как только easyzoom
загружен.