ExtJS学习之路第四步:看源码,实战MessageBox
可以通过看MessageBox.js的源码来深入认识,记住它的主要用法。Ext.MessageBox是实用类,用于生成不同风格的消息框,它是Singleton(单例),别名Ext.Msg。注意MessageBox是异步的,不同于一般的Javascript'alert'(它将停止浏览器的执行),显示一个MessageBox不会导致代码停止。出于这个原因,如果你有代码应该只运行在MessageBox用户反馈之后,你就应该加一个回调函数。
Ext.MessageBox.alert()
样式:警告框只有一个OK button
定义:alert: function(cfg, msg, fn, scope) {}
@param {String}title -标题栏的文字[查看定义发现,如果cfg是string类型的话,就是title,否则处理为config配置]
@param {String} msg -消息框主题文字
@param {Function} [fn] -在消息框被关闭之后触发回调函数,可以是点击按钮关闭也可以点击X关闭。
@param {Object} [scope=window] scope (this的引用) 回调函数运行的环境
<button id="btAlert" type="button">Alert</button>
<p id="pCon">Before Click!</p>
Ext.onReady(function(){
Ext.get("btAlert").on('click',function(){
Ext.Msg.alert('Name', 'Yixiaoheng',function(){
Ext.get("pCon").setHTML("After click!");
});
});
});
警告框

Ext.MessageBox.confirm()
样式:确认消息框,有两个按钮Yes 和No
定义:confirm: function(cfg, msg, fn, scope) {}
参数含义同上
Ext.onReady(function(){
var pCon="";
Ext.get("btMsg").on("click", function () {
var pCon="没有点击按钮,关闭了提示框";
Ext.get("btConfirm").on("click", function () {
Ext.MessageBox.confirm("提示", "是否要跳转页面?", function (btnId) {
pCon="点击了"+btnId+"按钮!"; //yes\no\cancel
Ext.fly("pCon").setHTML();
});
});
});
});

Ext.MessageBox.prompt()
样式:显示一个带有OK、Cancel按钮的消息框,提示用户输入些文字。这个提示可以是单行或者是多行的textbox。
定义:prompt : function(cfg, msg, fn, scope, multiline, value){}
@param {Boolean/Number} [multiline=false] True是创建多行textbox,用默认的文本高度defaultTextHeight
@param {String} [value=''] 默认文本输入框的值
Ext.onReady(function(){
Ext.get("btMsg").on("click", function () {
Ext.MessageBox.prompt(
"2014计划",
"请简略概述",
function (btn, text) {
Ext.fly("pCon").setHTML("点击了" + btn + "按钮,输入内容:" + text);
},
this,
true, //multiline
"亲,说点想法吧");
});
});

PS:foucus到文本框上去的时候,原值不会自动消失。
Ext.MessageBox.progress()
显示:带进度条的消息框
定义: progress : function(cfg, msg, progressText){}
@param {String} [progressText=''] 显示在进度条里面的文字。
需要自己负责更新进度条updateProgress,并且当进度条完毕的时候关闭消息框
Ext.get("btMsg").on("click", function () {
Ext.MessageBox.progress("进度", "正在处理,请稍候...", "0%");
});

但是这个是静态的哦,是不会动的啦!
Ext.MessageBox.updateProgress()
更新进度样式上的文字和进度。
updateProgress : function(value, progressText, msg){
this.progressBar.updateProgress(value, progressText);
if (msg){
this.updateText(msg);
}
return this;
},
@param {Number} [value=0] 0-1之间,比如0.6
@param {String} [progressText=''] 在进度条内部显示的文字
@param {String} [msg] 消息框主题的文字,默认没有定义
Ext.get("btMsg").on("click", function () {
Ext.MessageBox.progress("进度", "正在处理,请稍候...", "0%");
updateProgress(0);
});
function updateProgress (progress) {
if (progress >= 1) {//进度条到头了
Ext.MessageBox.updateProgress(1, "处理完成!","处理完成");
Ext.defer(function () { Ext.MessageBox.close(); }, 200);//类似setTimeout延迟200毫秒关闭消息框
return;
}
Ext.MessageBox.updateProgress(progress,"已完成"+Math.round(progress * 100) + "%");
Ext.defer(function () {
updateProgress(progress + 0.1);
}, 500);//递归
}

Ext.MessageBox.wait()
说明:显示无限自动更新进度条的消息框。这可以被用来阻止用户交互,而等待一个长期运行的进程来完成一个没有定义的时间间隔。当过程完成时,自己负责关闭消息框。
定义:
wait : function(cfg, title, config){
if (Ext.isString(cfg)) {
cfg = {
title : title,
msg : cfg,
closable: false,
wait: true,
modal: true,
minWidth: this.minProgressWidth,
waitConfig: config//
};
}
return this.show(cfg);
},
title-标题 cfg-主题内容 config-这个值被付给waitConfig最后,实质调用的是progressBar的wait()方法,参数具体可以查http://docs.sencha.com/extjs/4.2.1/#!/api/Ext.ProgressBar
Ext.get("btMsg").on("click", function () {
Ext.MessageBox.wait("详细信息内容", "标题", {
interval: 100,//进度条加载速度
duration: 10000,//持续时间
fn:function(){
this.updateText('加载完毕');
}
});
Ext.defer(function () {
Ext.MessageBox.hide();
}, 15000);
});

加载完毕之后中间进度条显示'加载完毕'。
一种是progress进度条,一种是wait如何取舍?
进度条对话框中显示的进度是需要我们控制的,也就是说,如果你知道一件事情的处理进度,并能够及时的更新进度条,那么建议使用进度条对话框。
如果说你要处理一个事情,但是不知道处理时间,这是我们就会用到等待对话框了,等待对话框中的进度条会一直循环,直到我们处理完成后将它关闭掉
其实,来自Ext.ProgressBar类,查看http://docs.sencha.com/extjs/4.2.1/source/ProgressBar.html#Ext-ProgressBar你就能在开头明白,ProgressBar有两类,一种是人工一种自动。在MessageBox中不过是继承自此罢了。
最后但很重要
你注意到没参数中的cfg?所有这些都可以用show()实现,来个综合的例子
Ext.get("btMsg").on("click", function () {
Ext.MessageBox.show({
title: "标题",
msg: "详细信息内容",
buttons: Ext.MessageBox.YESNOCANCEL, //对话框的按钮组合
multiline: false, //有文本框时,是否为多行文本框
closable: false, //是否可关闭
prompt: true,
icon: Ext.MessageBox.WARNING,
iconCls: "add16",
width: 400,
proxyDrag: true,
value: "初始文本",
progress: true,
progressText: "加载中..",
animateTarget: "bt3"
});
updateProgress(0);//前面定义过此函数
});

ok,到此MessageBox告一段落!~
这样学起来,是否没有那么复杂咩?如果源码并不是很长的话,对理解方法如何使用是非常有用的。突然解了最开始ExtJS有些方法没有具体写出应用,自己该如何调用的问题。
参考文献:
主要还是API 有MessageBox、ProgressBar
ExtJS 教程目录-这个是总结的比较全的,可以参考去看看哦
ExtJS学习之路第四步:看源码,实战MessageBox的更多相关文章
- 微软企业库5.0 学习之路——第四步、使用缓存提高网站的性能(EntLib Caching)
首先先补习下企业库的Caching Application Block的相关知识: 1.四大缓存方式,在Caching Application Block中,主要提供以下四种保存缓存数据的途径,分别是 ...
- 性能测试学习之路 (四)jmeter 脚本开发实战(JDBC &JMS &接口脚本 & 轻量级接口自动化测试框架)
1.业务级脚本开发 登录脚本->思路:在线程组下新建两个HTTP请求,一个是完成访问登录页,一个是完成登录的数据提交. 步骤如下: 1) 访问登录页 2) 提交登录数据的HTTP PS:对于 ...
- ExtJS学习之路第五步:认识最常见组件Panel
文档中描述 Panel(面板)是一个容器,它具有特定的功能和结构部件,这使它成为面向应用用户界面的完美基石.面板,继承自Ext.container.Container,能够配置布局以及子组件(Chil ...
- ExtJS学习之路第六步:深入讨论组件Panel用法
Panel加载页面 var myPanel=Ext.create('Ext.panel.Panel',{ bodyPadding: "15px 10px 0 10px", titl ...
- ExtJS学习之路第八步:Window组件
一个专门Panel用作程序窗口.默认的,Window可以是浮动的(floated).可缩放(resizable)以及可拖动的(draggable).Window能够被最大化适应可视窗口,(restor ...
- ExtJS学习之路第三步:理解引擎之下,ExtJS4中的类
写写就发现,有些代码不查查源头,不明白是怎么回事?搜到这篇文章觉得还是收益匪浅,更容易读懂代码. Classes in Ext JS 4: Under the hood Countdown to Ex ...
- ExtJS学习之路第七步:contentEl与renderTo的区别
上回在Panel的应用中我们应该能大致区分开conteEl和renderTo,这回我们从定义中区分. 在Panel的API中, contentEl:String指定一个现有的HTML元素或者id作为此 ...
- Android开发学习之路-Handler消息派发机制源码分析
注:这里只是说一下sendmessage的一个过程,post就类似的 如果我们需要发送消息,会调用sendMessage方法 public final boolean sendMessage(Mess ...
- OpenGL学习之路(四)
1 引子 上次读书笔记主要是学习了应用三维坐标变换矩阵对二维的图形进行变换,并附带介绍了GLSL语言的编译.链接相关的知识,之后介绍了GLSL中变量的修饰符,着重介绍了uniform修饰符,来向着色器 ...
随机推荐
- Canvas 教程
在本文章中 在你开始之前 教程内容 相关资料 A note to contributors <canvas> 是一种可以通过编写脚本(通常是JavaScript)来实现绘制图形的HTML元 ...
- PRML读书会第三章 Linear Models for Regression(线性基函数模型、正则化方法、贝叶斯线性回归等)
主讲人 planktonli planktonli(1027753147) 18:58:12 大家好,我负责给大家讲讲 PRML的第3讲 linear regression的内容,请大家多多指教,群 ...
- 我为什么期待M#?
前段时间的报导"微软将推新编程语言M#:系统编程级别的C#",第一眼看到并没有当初看到F#的那一种不安,反而感到欣喜,业界一直存在"语言论"讨论c#.java. ...
- [bzoj 1026]windy数(数位DP)
题目:http://www.lydsy.com/JudgeOnline/problem.php?id=1026 分析: 简单的数位DP啦 f[i][j]表示数字有i位,最高位的数值为j的windy数总 ...
- 第五次课堂总结x
一.知识点: 1.while语句 循环体语句: while语句里的表达式可以是任何合法的表达式,循环体则只可以表达一条语句. while的循环体语句需要能改变循环条件的真假条件. ...
- PHP使用DateTime类做时间日期到字符串转换
PHP关于时间日期的处理不是很规范,简单就简单了,就是不知道输入的字符串是否能够正确转化为需要的DateTime类型. 面向对象的PHP应该使用DateTime类来做string和dateTime的转 ...
- 每天一个linux命令(6):mv命令
mv命令是move的缩写,可以用来移动文件或者将文件改名(move (rename) files),是Linux系统下常用的命令,经常用来备份文件或者目录. 1.命令格式: mv [选项] 源文件或目 ...
- Canvas识别相似图片
<!doctype html> <html> <head> <meta charset="utf-8"> <title> ...
- note.js之 Mongodb在Nodejs上的配置及session会话机制的实现
上篇我们使用nodejs实现了一个express4的网站构建配置,但一个有面的网站怎么可以缺少一个数据库呢.现在较为流行的就是使用MONGODB来作为nodejs网站引用的数据库,可能它与nodejs ...
- 获取手机的gps定位
只要手机有GPS模块,可以用HTML5的Geolocation接口获取 在HTML5中,geolocation作为navigator的一个属性出现,它本身是一个对象,拥有三个方法: - getCurr ...