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()); }); });