您的位置:首页 > 其它

模块加载系统

2012-02-05 21:41 295 查看
模块加载系统初尝版,2个暴露函数:
加载模块:require(requireLists,callback);
require(['core','dom/selector'],function(){
  //coding here,
  //callbacks
})
定义模块:define(id,requireLists,callback);
define('id',['core','dom/selector'],function(){
  //coding here
  //callbacks
})

View Code

(function(win) {
loadedModules = {};
var reg_module_name = /(?:^|\/)([^(\/]+)$/;
function require(modules, callback) {
var moduleNames = [],
self = arguments.callee;
for (var i = 0, l = modules.length; i < l; i++) {
var matt = modules[i].match(reg_module_name);
moduleNames.push(matt[1]);
if (! (matt[1] in loadedModules) && ! detectExist(modules[i])) {
appendScript(modules[i]);
}
}
detectLoads(moduleNames, callback);
}
function define(id, requireModules, callback) {
require(requireModules, function() {
callback();
loadedModules[id] = 1;
})
}
function detectExist(module) {
var exist = false,
scripts = document.getElementsByTagName("script");
for (var i = 0, l = scripts.length; i < l; i++) {
if (scripts[i].getAttribute("src") === module + ".js") {
exist = true;
break;
}
}
return exist;
}
function appendScript(module) {
var script = document.createElement("script");
script.setAttribute("charset", "utf-8");
script.setAttribute("defer", true);
script.setAttribute("src", module + ".js");
document.getElementsByTagName("head")[0].appendChild(script);
}
function detectLoads(modules, callback) {
var flag = true,
args = arguments,
fn = args.callee;
for (var i = 0, l = modules.length, el; i < l; i++) {
el = modules[i];
if (!loadedModules[el]) {
flag = false;
break;
}
}
if (flag) {
callback();
} else {
setTimeout(function() {
fn.apply(null, args);
});
}
}
win.require = require;
win.define = define;
})(this);
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: