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修饰符,来向着色器 ...
随机推荐
- 启动页面设置,icon图标设置
更多尺寸像素如何放置请看:http://chicun.jammy.cc/ 如何设置App的启动图,也就是Launch Image? 新建一个iosLaunchImage文件夹
- python实现简易数据库之一——存储和索引建立
最近没事做了一个数据库project,要求实现一个简单的数据库,能满足几个特定的查询,这里主要介绍一下我们的实现过程,代码放在过ithub,可参看这里.都说python的运行速度很慢,但因为时间比较急 ...
- HoloLens开发手记 - Unity之World Anchor空间锚
World Anchor空间锚提供了一种能够将物体保留在特定位置和旋转状态上的方法.这保证了全息对象的稳定性,同时提供了后续在真实世界中保持全息对象位置的能力.简单地说,你可以为全息物体来添加空间锚点 ...
- asp.net Core开启全新的时代,用视频来告诉你,学习就是这么SO easy。
https://channel9.msdn.com/Blogs/NET-Core/What-is-NET-Core 系统大家多发布一些视频的资料,学习起来更方便!我看到很多人发布的博客里面有的时候对于 ...
- 文件夹文件遍历并插入数据库的操作,IO Directory File的递归操作
在我们管理内容管理系统时,数据量大时,对机器的依赖性就比较强了,比如,我要将一个文件夹中的很多图片上传到网站,一个个上传会很花时间,就想到了通过遍历文件夹得到文件名,并将路径与文件保存到数据库中对应的 ...
- AJAX(二)AJAX框架
上文(AJAX(一)AJAX的简介和基础)对ajax异步请求服务器做了详细的介绍和基础应用,可以看出,ajax的一些过程是相对不变的.不必要每次发送请求都写一遍发送代码,一些ajax开发人员已经把他们 ...
- grunt使用watch和livereload的Gruntfile.js的配置
周末在家看angularJS, 用grunt的livereload的自动刷新, 搞了大半天, 现在把配置贴出来, 免得以后忘记了, 只要按照配置一步步弄是没有问题的; 开始的准备的环境安装是: (1) ...
- Java设计模式-迭代子模式(Iterator)
顾名思义,迭代器模式就是顺序访问聚集中的对象,一般来说,集合中非常常见,如果对集合类比较熟悉的话,理解本模式会十分轻松.这句话包含两层意思:一是需要遍历的对象,即聚集对象,二是迭代器对象,用于对聚集对 ...
- 【bzoj4010】 HNOI2015—菜肴制作
http://www.lydsy.com/JudgeOnline/problem.php?id=4010 (题目链接) 题意 给出一张无向图要求出一个拓扑序列满足1的位置最靠前 ,在保证上面的条件下使 ...
- codevs1500 后缀排序
题目描述 Description 天凯是MIT的新生.Prof. HandsomeG给了他一个长度为n的由小写字母构成的字符串,要求他把该字符串的n个后缀(suffix)从小到大排序. 何谓后缀?假设 ...