我需要在加载模块时加载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文件,要求垫片查找?
答案 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
,就会执行此代码。