yes*_*ska 4 javascript amd requirejs js-amd
我需要在加载模块时加载 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'); }
}}
});
Run Code Online (Sandbox Code Playgroud)
它适用于其他库,如 Datatables,因为它们是非 Amd 模块。但是对于 Amd 模块,requireJs 不会寻找垫片,因此不会提升我的 init 函数。
有没有办法在加载模块后调用回调?或者加载一个 Amd 模块,因为它是一个普通的 javascript 文件来寻找垫片?
shim为适当的 AMD 模块(调用define)定义 a 会导致未定义的行为。
你可以做的是使用map如下:
map: {
'*': {
easyzoom: 'easyzoom-intercept'
},
'easyzoom-intercept': {
easyzoom: 'easyzoom'
}
}
Run Code Online (Sandbox Code Playgroud)
它的作用是指定当任何模块 ( '*') 需要该模块时easyzoom,easyzoom-intercept应改为加载该模块。但是,当easysoom-intercept要加载时easyzoom,easyzoom应该加载模块。然后你创建一个easyzoom-intercept这样的模块:
define([easyzoom], function (ez) {
loadCss('/lib/easyzoom/css/easyzoom.css');
return ez;
});
Run Code Online (Sandbox Code Playgroud)
此代码将在easyzoom加载后立即执行。
| 归档时间: |
|
| 查看次数: |
1782 次 |
| 最近记录: |