Ext入门学习系列(三)复杂自定义窗体

通过前2节的学习,基本掌握了Ext的语法和运行原理,可以作出一些简单的应用。本节我们一起来完成复杂点的对话框操作,因为在实际项目中经常要用到确认对话框等多种操作,然后根据客户的选择作出不同的响应。

一、常见的复杂对话框

常见的复杂点的确认对话框有这么几种,如下图:

效果一:选择确认

效果二:反馈对话框

效果三:多行文本反馈确认

效果四:多按钮选择

效果五:进度条

二、Ext弹出窗体思路

效果一

如上图效果一,是一个很简单的选择确认对话框,弹出的思路也比较简单,和传统的JS一样使用的是Confirm函数,但是在Ext中这些对话框被统一归结到Message下面。所以实现起来只有一句话:“Ext.MessageBox.confirm("选择框","你到底是选yes还是no?");”,第一个参数是对话框的标题,后面是对话框消息正文。

全部代码如下:

<script type="text/javascript"> 
function start(){ 
Ext.MessageBox.confirm("选择框","你到底是选yes还是no?"); 

Ext.onReady(start); 
</script>

如果为其提供一个回调函数,则该函数将在单击按钮后被调用(包括右上角的退出按钮),所单击按钮的id将被作为唯一的参数传递到回调函数中。使用方法是在confirm的参数第三个位置加上回调函数名,然后下面完成这个回调函数,定义一个参数接收用户的选择结果,然后可以根据选择来作出判断,全部代码如下:

<script type="text/javascript"> 
function start(){ 
Ext.MessageBox.confirm("选择框", "你到底是选yes还是no?", callback); 
function callback(id) { 
Ext.MessageBox.alert("提示","你选择的是:"+id); 


Ext.onReady(start); 
</script>

再复杂点的判断可以使用JS原生的语法进行判断,如:

<script type="text/javascript"> 
function start(){ 
Ext.MessageBox.confirm("选择框", "你到底是选yes还是no?", callback); 
function callback(id) { 
if (id == "yes") { 
Ext.MessageBox.alert("提示","你点了确定"); 
} else { 
Ext.MessageBox.alert("提示", "你点了取消?"); 



Ext.onReady(start); 
</script>

效果二

效果二完成的是一个带输入的确认对话框,用的是prompt,和上个效果一样,也需要定义回调函数用来接收用户操作的结果,同时还有用户输入的内容。本例完成一个请求用户输入,如果输入并点击了“确定”则弹出提示“你输入的是…”,而如果没有输入直接取消了,就弹出“你取消了输入!”,完整代码如下:

<script type="text/javascript"> 
function msg() { 
Ext.MessageBox.prompt("提示", "随便写点什么吧!", callback); 
function callback(id, text) { 
if (id == "ok") { 
Ext.MessageBox.alert("提示","你输入的是?:" + text); 
} else { 
Ext.MessageBox.alert("提示","你已经取消了输入!"); 



Ext.onReady(msg); 
</script>

效果三

带多行文本输入框的对话框,这个例子实现思路需要变化一下,使用自定义对话框,原因是原生JS中本来就没有多行文本框这一说。而且接收返回值的思路需要变化。具体代码如:

<script type="text/javascript"> 
function msg() { 
Ext.MessageBox.show({ 
title: ‘标题‘, msg: ‘要显示的内容‘, 
width: 300, buttons: Ext.MessageBox.OKCANCEL, 
multiline: true, 
fn: callback//这个是Ext专属属性,用来指示处理函数名 
}); 
function callback(id, text) { 
Ext.MessageBox.alert(text); 


Ext.onReady(msg); 
</script>

本例判断省略,和上个例子判断思路一致。

效果四

这个效果是可以显示多个按钮供客户选择,用于多条件处理的情况。

<script type="text/javascript"> 
function msg() { 
Ext.MessageBox.show({ 
title: ‘标题‘, msg: ‘要显示的内容‘, 
buttons: { yes: true, no: true, cancel: true }, 
// buttons: { yes: "是啊", no: "不啊", cancel: "取消了啊" }, 
fn: callback//这个是Ext专属属性,用来指示处理函数名 
}); 
function callback(id) { 
Ext.MessageBox.alert("提示","你选择的是"+id); 


Ext.onReady(msg); 
</script>

效果五

关于进度条,有两种实现思路,一是按大小确定,一是按时间确定。本例完成按大小控制进度条,完整代码如下:

<script type="text/javascript"> 
function msg() { 
Ext.MessageBox.show({ 
title: ‘请稍等‘, 
msg: ‘加载中...‘, 
width: 300, 
progress: true, 
closable: false 
}); 
var f = function (v) { 
return function () { 
if (v == 12) { 
Ext.MessageBox.hide(); 
Ext.MessageBox.alert(‘完成‘, ‘加载完毕!‘); 
} else { 
var i = v / 11; 
Ext.MessageBox.updateProgress(i, Math.round(100 * i) + ‘% 已经完成!‘); 

}; 
}; 
for (var i = 1; i < 13; i++) { 
setTimeout(f(i), i * 500); 


Ext.onReady(msg); 
</script>

本例进度条是模拟操作,在具体项目中,如文件上传需要实时判断,在后续的课程中详细探讨,进度条不是今天的重点,今天重点讲述自定义对话框的用法。

三、总结:

自定义对话框可以帮助我们完成一些相对复杂的操作,比如获取用户的选择等,另外,自定义对话框也可以定义对话框的图标,只需要加上:“icon:Ext.MessageBox.INFO,//显示图标”,即可。同时也可以自定义图标,显示成你需要的图片,如下效果:

实现思路是:

1. 先定义一个类样式,指定背景图片地址和不平铺;

2. 在icon属性中引入类样式名;

本节代码下载

时间: 2024-11-03 01:17:43

Ext入门学习系列(三)复杂自定义窗体的相关文章

Ext入门学习系列(二)弹出窗体

第二章 弹出窗体 上节学习了Ext的环境搭建和最基本的一个操作——弹出对话框,作为一个引子,本节讲述如何弹出一个新窗体,从实例讲解Ext的基本运行原理. 一.Ext的窗体长什么样? 先来看看几个效果,相信随着学习的深入,大家会被Ext的绚丽所征服.下面就是Ext弹出的几个基本窗体: 我们可以发现弹出的2个窗体比我们传统的网页漂亮多了,同时更有价值的是还能随意切换风格.那么类似于这种窗体到底是怎么弹出的呢? 二.Ext弹出窗体思路 在环境搭建正确的情况下,页面中引入也正确,就可以按照以下思路进行编

Asp.Net MVC5入门学习系列⑥

接着上次的篇幅,我们这篇手动来写一个查询的流程代码! 搜索/查询 流程功能的实现 那现在要做搜索(查询)功能我们第一步应该做什么呢!第一次是不是我们应该去Controller(控制器)里去搞一个搜索(查询)的方法(action),那么我就说做搜索功能吧!搜索可能是根据名字搜索,如果根据某一个条件搜索的话,那么我们的方法就需要一个参数,如果是多个条件的话就需要多个参数给方法传递多个参数,这么说你的方法的参数多少是不是就取决你我们的搜索条件.我们开始就先做一个简单的单条件查询. 我们把这个搜索的功能

VSTO之旅系列(三):自定义Excel UI

原文:VSTO之旅系列(三):自定义Excel UI 本专题概要 引言 自定义任务窗体(Task Pane) 自定义选项卡,即Ribbon 自定义上下文菜单 小结 引言 在上一个专题中为大家介绍如何创建Excel的解决方案,相信大家通过从上面一个专题之后了解了Excel的对象模型,以及Office两种解决方案的,看完上一个专题之后,肯定很多朋友想为Excel自定义属于自己的UI界面,例如,有这样的一些疑问——是否可以使用VSTO来自定义选项卡呢? 是否可以自定义上下文菜单的呢?如果你也有这些疑问

Asp.Net MVC5入门学习系列①

原文:Asp.Net MVC5入门学习系列① 现在直接开始MVC5的学习系列,学习资源来自Micrsoft. 开始使用Asp.Net MVC 5 打开Visual Studio 2013,然后新建一个项目,具体如下图: VS13与12/10不同的是创建Web的时候你不能像以前那样直接选你要创建框架项目,而把这个选择集中在了第二步骤,当你操作完上面点击确定就可以看到一个集中所有web框架供你选择的窗体,具体如下: 然后点击确定,vs会帮我们完成创建mvc应用程序的动作. 创建完成后,我们的VS会呈

Asp.Net MVC5入门学习系列②

原文:Asp.Net MVC5入门学习系列② 添加一个Controller(控制器) 因为我们用的是Asp.Net MVC,MVC最终还是一套框架,所以我们还是需要遵循它才能玩下去,或者说是更好的利用来便于我们的开发,要是对MVC概念还有点模糊的,可以去我以前写的第一话 Asp.Net MVC 3.0[Hello World!]里开始部分就对此做了阐述.假定所有跟我一起学的都了解MVC的这么一个概念,我们就开始下面的步骤了: 现在我们开始添加一个Controller,具体如下: 我们选择创建一个

Asp.Net MVC5入门学习系列⑤

原文:Asp.Net MVC5入门学习系列⑤ 检查VS生产的编辑方法和编辑窗体 前面我们一步使用强类型,然后创建Controller(控制器)的时候,VS默认已经给我们把CURD都简单的实现了.这篇的话就简单的看下它默认实现的代码,VS终归强大,但是方便的同时也是在弱化我们,当然大牛级别的这样搞是为了效率,我们新手的话还是建议不要去偷那个懒,至于为什么?不解释啦..... 我们打开我们的创建的实体对象Movie类,然后再ReleaseDate属性上添加一些标识特性,具体如下: 我们设置了一下Re

Asp.Net MVC5入门学习系列⑦

原文:Asp.Net MVC5入门学习系列⑦ 接着上篇结尾所说,如果开发中刚才遇到Model需要添加或者减少字段/属性的话,但是刚好你也利用EF的Code frist通过Model生存的数据库,这时改怎么办? 添加一个字段 我们现在要给Movie实体模型类添加一个评价的字段该怎么搞!我们知道我们默认使用EF code frist生存的数据库是同步性的,这样才能便于我们更好的开发,如果实体模型和数据库不同步的话,实体框架应该会抛出异常.  code frisr设置模型库迁移 在VS里我们先移除da

Ext JS学习第三天 我们所熟悉的javascript(二)

•javascript之函数 •对于Ext开发者,我还是希望你能对javascript原生的东西非常了解.甚至熟练掌握运用.那么函数,无疑是非常重要的概念.首先在前面一讲,我们知道了函数也是一种数据类型,创建函数一共有三种方式.每种方式他们都会有区别,分别为: –function语句形式 –函数直接量形式 –构造函数形式 •函数中的arguments对象 –argument的作用一:接受函数的实际参数 –argument的作用二:用于做递归操作 栗子代码 1 //Function 函数 2 //

Asp.Net MVC5入门学习系列④

原文:Asp.Net MVC5入门学习系列④ 添加Model且简单的使用EF 对于EF(EntityFramework)不了解的朋友可以去百度文科或者在园子里搜一些简资源看下,假如和我一样知道EF的概念,那么就知道EF有一个code first的特性,什么意思呢!说的通俗简单明了点就是:通过代码映射到数据库!有朋友会说这里不是添加Model说这个EF干啥呢!说这个code first呢就是我们在一会添加Model的同时我打算利用EF的code first特性把我们的Model映射到数据库,这样我