Есть 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 загружен.

Другие вопросы по тегам