加载模块时需要 运行 回调
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
加载后立即执行。
我需要在加载我的模块时加载 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
加载后立即执行。