nbkangta 发表于 2013-1-23 02:53:49

Ext 2.0动态加载JS工具类

ScriptLoader = function() {    this.timeout = 30;    this.scripts = [];    this.disableCaching = false;    this.loadMask = null;};ScriptLoader.prototype = {    showMask: function() {      if (!this.loadMask) {      this.loadMask = new Ext.LoadMask(Ext.getBody());      this.loadMask.show();      }    },    hideMask: function() {      if (this.loadMask) {      this.loadMask.hide();      this.loadMask = null;      }    },    processSuccess: function(response) {      this.scripts = true;      window.execScript ? window.execScript(response.responseText) : window.eval(response.responseText);      if (response.argument.options.scripts.length == 0) {      this.hideMask();      }      if (typeof response.argument.callback == 'function') {      response.argument.callback.call(response.argument.scope);      }    },    processFailure: function(response) {      this.hideMask();      Ext.MessageBox.show({title: 'Application Error', msg: 'Script library could not be loaded.', closable: false, icon: Ext.MessageBox.ERROR, minWidth: 200});      setTimeout(function() { Ext.MessageBox.hide(); }, 3000);    },    load: function(url, callback) {      var cfg, callerScope;      if (typeof url == 'object') { // must be config object          cfg = url;          url = cfg.url;          callback = callback || cfg.callback;          callerScope = cfg.scope;          if (typeof cfg.timeout != 'undefined') {            this.timeout = cfg.timeout;          }          if (typeof cfg.disableCaching != 'undefined') {            this.disableCaching = cfg.disableCaching;          }      }      if (this.scripts) {      if (typeof callback == 'function') {          callback.call(callerScope || window);      }      return null;      }      this.showMask();      Ext.Ajax.request({          url: url,          success: this.processSuccess,          failure: this.processFailure,          scope: this,          timeout: (this.timeout*1000),          disableCaching: this.disableCaching,          argument: {            'url': url,            'scope': callerScope || window,            'callback': callback,            'options': cfg          }      });    }};ScriptLoaderMgr = function() {    this.loader = new ScriptLoader();    this.load = function(o) {      if (!Ext.isArray(o.scripts)) {      o.scripts = ;      }      o.url = o.scripts.shift();      if (o.scripts.length == 0) {      this.loader.load(o);      } else {      o.scope = this;      this.loader.load(o, function() {          this.load(o);      });      }    };};ScriptMgr = new ScriptLoaderMgr();  构建一个one page one application的应用,动态的加载js组件是关键,虽然看到了5,6种解决方案,可是还是没办法做的很通用,作为一个项目组件。突然发现ExtJs的官方论坛确实是个好地方,由很多好用的资源,可是E文还是没有母语看这舒服,把最好的方案记录下。原文地址:http://extjs.com/forum/showthread.php?t=37897
 
使用示例:
ScriptMgr.load({scripts: ['/js/other-prerequisite.js', '/js/other.js'],callback: function() {    var other = new OtherObject();    alert(other); //just loaded}});
页: [1]
查看完整版本: Ext 2.0动态加载JS工具类