requirejs默认把require函数指定的模块都下载了。利用jquery的deferred函数可以实现延迟加载效果。
LazyLoader.js
require.async = function (modules, callback) {
var _get = function () {
var fileNames = Array.prototype.slice.call(arguments);
var dfd = $.Deferred();
require(fileNames, function () {
dfd.resolve.apply(dfd, arguments);
});
return dfd.promise();
};
var eval_var = '',
eval_arguments = [];
_.each(modules, function (val, key) {
eval_arguments.push('obj_' + key);
eval_var += 'var obj_' + key + '=_get("' + val + '");';
});
eval(eval_var + '$.when(' + eval_arguments + ').then(function (' + eval_arguments + ') {\
callback(' + eval_arguments + ');\
});');
};
调用示例:
$('#TestBtn').click(function () {
require.async(['./test'], function (Test) {
console.log(new Test());
});
});