加载模块时需要 运行 回调

have requirejs to run callback when the module is loaded

我需要在加载我的模块时加载 css,所以我使用垫片这样做了:

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 不会寻找垫片,因此不会引发我的 init 函数。

有什么方法可以在加载模块后调用回调?或者加载一个 Amd 模块,因为它是一个普通的 javascript 文件来寻找垫片?

为正确的 AMD 模块(调用 define 的模块)定义 shim 会导致未定义的行为。

您可以使用 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 加载后立即执行。