/** * 前端模块异步加载器。 依赖ext的createCallback、createDelegate函数 * var ml = new ModuleLoader({ script : ['/ajaxee/test.js','/ajaxee/test2.js'], style : ['/ajaxee/test.css'], action:{ openPage: function(){alert("3"); }} }); ml.openPage(); //执行函数时才开始加载 * @class moduleLoader * @param {Object} config 配置属性对象 * * @property {Object} action 该模块的处理函数,类型为hash * @property {Array} script 要异步下载的脚本列表 * @property {Array} style 要异步下载的样式列表 * @propety {Boolean} loaded * True表示当前资源已加载到浏览器渲染。此项是为了不会重复下载资源时的判读根据。只读的。Read-Only */ModuleLoader = function(config) { Ext.apply(this, config); this.loaded = false;// 函数作为值送入createCallback方法,执行moduleLoader的此函数时, // 都会执行moduleDetect, 然后由回调onSuccessHandler来执行action var moduleDetect = this.moduleDetect.createDelegate(this); for (var i in this.action) { var oldFn = this.action[i]; this[i] = moduleDetect.createCallback(oldFn); }}; /** * @private * @param {Fucntion} * onSuccessHandler “按需加载”完成后的回调函数 */ModuleLoader.prototype = { moduleDetect : function(onSuccessHandler, scope) { if (this.loaded === false) { ModuleLoader.load({ script : this.script, style : this.style, onSuccess : onSuccessHandler }); this.loaded = true; } else { onSuccessHandler.call(scope); } }}; /** * 局部加载JS或CSS文件 * * @static method 静态用法: <code> ModuleLoader.prototype.load({ script : ['/ajaxee/test.js','/ajaxee/test2.js'], style : ['/ajaxee/test.css'], onSuccess : funtion(){} })</code> */ModuleLoader.load = function(pathConfig) { var dom; var date = new Date(); //每次跟新js文件, 调试用. if (pathConfig.style) { if (!pathConfig.style.pop) pathConfig.style = [pathConfig.style]; for (var i = 0, j = pathConfig.style.length; i < j; i++) { dom = document.createElement("link"); dom.type = "text/css"; dom.rel = "stylesheet" dom.href = pathConfig.style[i]; document.getElementsByTagName("head")[0].appendChild(dom); } } if (pathConfig.script) { if (!pathConfig.script.pop) pathConfig.script = [pathConfig.script]; for (var i = 0, j = pathConfig.script.length; i < j; i++) { dom = document.createElement("script"); dom.src = pathConfig.script[i]+"?"+date; document.getElementsByTagName("head")[0].appendChild(dom); } // 兼容IE、非IE浏览器的判断 dom[Ext.isIE ? "onreadystatechange" : "onload"] = function() { if (this.readyState && this.readyState == "loading") return; dom = null; if (pathConfig.onSuccess){ pathConfig.onSuccess.call(pathConfig.scope, pathConfig.script); } } }};/** * 前端模块异步加载器。 依赖ext的createCallback、createDel 你的当前访问异常,请进行认证后继续阅读剩余内容。 提交