在模块加载时有requirejs运行回调

时间:2015-09-05 20:53:13

标签: javascript requirejs amd js-amd

我需要在加载模块时加载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'); }
    }}
});

它适用于像Datatable这样的其他库,因为它们是非Amd模块。但对于Amd模块,requireJs不会寻找填充程序,因此不会引发我的init函数。

有没有办法在加载模块后调用回调?或者加载一个Amd模块,因为它是一个简单的javascript文件,要求垫片查找?

1 个答案:

答案 0 :(得分:3)

为正确的AMD模块(一个调用shim的模块)定义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,就会执行此代码。