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[response.argument.url] = 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[url]) {
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.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();
ScriptMgr.load({
scripts: ['/js/other-prerequisite.js', '/js/other.js'],
callback: function() {
var other = new OtherObject();
alert(other); //just loaded
}
});
http://www.extjs.com/forum/showthread.php?37897-dynamically-load-javascript
国外人写的一个动态加载JS的工具,开发的时候还是可以用的着的。
分享到:
相关推荐
Ext4 动态加载js例子 Ext4 动态加载js例子 Ext4 动态加载js例子 Ext4 动态加载js例子
本例采用ASP.NET MVC3 +EXTJS4 MVC 框架,完美实现了EXTJS4动态加载JS文件,对ASP.NET MVC3及EXTJS4 MVC 各应用要点进行了应用。对于想采用ASP.NET MVC3 +EXTJS4 MVC 框架的学习者有很好的帮助,快速掌握MVC框架,本...
ext4.0动态加载,使用json数据源,整个项目只有一个页面,js按照mvc模式搭建
下面结合Ext JS来说明如何从服务器上动态加载JS脚本来动态创建窗体。 1 项目结构: 项目结构如下:其中GetJSUI一般处理程序用来从数据库表中抓取UI配置,并返回到客户端;Contents文件夹下用HTML文件和JS库等。...
EXT JS动态加载机制的研究与实现
ext是一个强大的js类库,以前是基于YAHOO-UI,现在已经完全独立了, 主要包括data,widget,form,grid,dd,menu,其中最强大的应该算grid了,编程思想是基于面向对象编程(oop),扩展性相当的好.可以自己写扩展.自己定义...
对ext Grid进行了封装,动态加载数据源,动态生成列
3. 采用”适配器(adapters)“使得 Ext 和其他的 JavaScript 库共存; 4. 充分利用 AJAX 技术; 5. 在您的语言中展示 ExtJS 对象; 关于 Ext: 我们采用最新的的 Ext 2.x 版本, 1.x 版本到 2.x 版本的是一个重组的...
动态加载JS,Ext动态加载,加载过程,希望给大家带来一些帮助,谢谢,第一次上传
自己模仿Ext写的加载效果,感觉还可以,放上来和大家分享,可在实际项目中使用,收大家一分,意思一下。
6.3.4 在form中使用Ext.Direct加载数据 185 6.3.5 在form中使用Ext.Direct提交数据 187 6.3.6 使用polling方式进行轮询 189 6.4 本章小结 191 第7章 Store 192 7.1 Store的结构 192 7.2 Ext.data.Field 197 7.3 Ext....
springMVC整合ext4js 包括主界面代码实现; 包括主界面导航代码实现; 包括添加表单的代码实现; 希望整个权限系统完成后全部发上来;
ext是一个强大的js类库,以前是基于YAHOO-UI,现在已经完全独立了, 主要包括data,widget,form,gird,dd,menu,其中最强大的应该算gird了,编程思想是基于面对对象编程(oop),扩展性相当的好.可以自己写扩展.自己定义命名...
包加载器Ext JS 动态包加载器要求这个包被 Ext JS 应用程序和 Sencha Cmd 6.5 使用安装 下载 。 我们建议将 Ext JS 解压到您的主目录中的"sencha-sdks"文件夹中。在 Cmd 应用程序中使用只需将package-loader添加到'...
自动生成行号,支持checkbox全选,动态选择显示哪些列,支持本地以及远程分页,可以对单元格按照自己的想法进行渲染,这些也算可以想到的功能。 再加上可编辑grid,添加新行,删除一或多行,提示脏数据,推拽改变...
EXT TREE 扩展CHECKBOX所需JS loader方法中添加: baseAttrs: {uiProvider: Ext.tree.TreeCheckNodeUI }
4.4.4 实现动态加载:ext.loader / 151 4.4.5 管理类的类:ext.classmanager / 159 4.4.6 类创建的总结 / 161 4.5 动态加载的路径设置 / 163 4.6 综合实例:页面计算器 / 165 4.7 本章小结 / 169 第5章 ext ...
自己由于使用extjs3,开发了一个动态加载js的管理器,类似extjs4的使用方式,但实现方式完全不一样,有兴趣的朋友可以下载后使用,欢迎吐槽
text : "添加月租金", iconCls : "add10", listeners : { click : function() { add_rent.show(); } } }, { text : "删除", iconCls : "add10", ...