ExtJs之FormPanel篇

表单时是web中常见的元素,Ext中的表单也是特别丰富的,接下来我们一块看看表单的相关内容。

还是先看一下代码和效果:

Ext.onReady(function(){var fp=new Ext.form.FormPanel({ //注意:Ext.form.FormPanel=Ext.FormPanel        title:'用户登录',
width:300,//height:250,        bodyStyle:'padding:5px 5px 0',
renderTo:'divFormPanel',
frame:true,//在此,这个属性就很重要了,如果不为true,你会看到下面的button和panel看起来是分开的        url:'login.aspx',//提交地址        method:'post',//提交方法        defaults:{ //在这里同一定义item中属性,否则需要各个指明            xtype:'textfield',
labelAlign:'left',
labelWidth:80,
width:100
},
items:[
{
fieldLabel:'用户名',
xtype:'textfield',//Ext基本类型,也可以用其对应的form元素代替                name:'userName',
id:'userName'//width:100            },
{
fieldLabel:'密码',//xtype:'textfield',//Ext基本类型,也可以用其对应的form元素代替                inputType:'password',
name:'userPwd',
id:'userPwd'//width:100            }
],
buttonAlign:'center',//按钮对其方式        buttons:[
{
text:'确定'
},
{
text:'取消',
handler:function(){//点击取消按钮的操作事件                    fp.hide();
}
}
]
});
}); 

FormPanel也比较好用,但是我认为我们有必要就上面xtype和inputType说几点。

大家其实很多时候会发现,在Ext组件中(对于所有容器组件[这里就是可以有子组件的组件])items里面基本上有两种存在形式,一种就是像上面一样我们直接以Json的形式进行配置;另一种就是既然items中是一个个item,我们可以定义一个对象放到里面,例如假设在一个panel中还有一个子panel,我们就可以直接var pn=new Ext.Panel({…});然后放到items中。上面的话我再强调一下,它不仅仅针对FormPanel,而是对于所有容器组件都是这样。不妨看一个例子,我觉得大家经常看到这样的代码:

var panel=new Ext.Panel({
renderTo:"divPanel",
title:"我的面板",
width:400,
height:300,
items:[new Ext.Panel({title:'子panel1',html:'子panel1内容'}),new Ext.Panel({title:'子panel2',html:'子panel2内容'})
]
}); 

以至于很多初学者认为像上面的代码不能够写成下面的形式:

var panel=new Ext.Panel({
renderTo:"divPanel",
title:"我的面板",
width:400,
height:300,
items:[
{…},
{…}
]
}); 

其实这是对于xtype不太了解的原因。Ext中xtype和Class(类)是一一对应的,所以既然上面items中是panel对象,那么就有对应的xtype,事实上我们可以知道它对应"panel",那么既然是这样,上面的代码当然可以写成第第一种存在形式:

var panel=new Ext.Panel({
renderTo:"divPanel",
title:"我的面板",
width:400,
height:300,
items:[
{xtype:'panel',title:'子panel1',html:'子panel1内容'},
{xtype:'panel',title:'子panel2',html:'子panel2内容'}
]
}); 

事实上从本质上来讲上面两种情况是一样的,只是表现形式不同而已,那么对于上面的代码如何用第二种方式呢,你会问,像{    fieldLabel:'用户名',    xtype:'textfield',//Ext基本类型,也可以用其对应的form元素代替name:'userName',id:'userName'    //width:100    }这样的代码是什么对象呢?其实它对应的是"Ext.form.TextField"。这里放上一张对应表:


xtype



box


Ext.BoxComponent


button


Ext.Button


colorpalette


Ext.ColorPalette


component


Ext.Component


container


Ext.Container


cycle


Ext.CycleButton


dataview


Ext.DataView


datepicker


Ext.DatePicker


editor


Ext.Editor


editorgrid


Ext.grid.EditorGridPanel


grid


Ext.grid.GridPanel


paging


Ext.PagingToolbar


panel


Ext.Panel


progress


Ext.ProgressBar


propertygrid


Ext.grid.PropertyGrid


slider


Ext.Slider


splitbutton


Ext.SplitButton


statusbar


Ext.StatusBar


tabpanel


Ext.TabPanel


treepanel


Ext.tree.TreePanel


viewport


Ext.Viewport


window


Ext.Window


toolbar


Ext.Toolbar


tbbutton


Ext.Toolbar.Button


tbfill


Ext.Toolbar.Fill


tbitem


Ext.Toolbar.Item


tbseparator


Ext.Toolbar.Separator


tbspacer


Ext.Toolbar.Spacer


tbsplit


Ext.Toolbar.SplitButton


tbtext


Ext.Toolbar.TextItem


form


Ext.FormPanel


checkbox


Ext.form.Checkbox


combo


Ext.form.ComboBox


datefield


Ext.form.DateField


field


Ext.form.Field


fieldset


Ext.form.FieldSet


hidden


Ext.form.Hidden


htmleditor


Ext.form.HtmlEditor


label


Ext.form.Label


numberfield


Ext.form.NumberField


radio


Ext.form.Radio


textarea


Ext.form.TextArea


textfield


Ext.form.TextField


timefield


Ext.form.TimeField


trigger


Ext.form.TriggerField

好了,说了那么多xtype,inputType还没有说呢。我们说xtype和class是对应的,当然表单中xtype和class都有inputType属性,而且最为有意思的是对于form中的元素inputType的取值范围是一样的,什么意思呢?我们还看例子(我们直接对上面的代码精简好了,这个例子中我们就用class形式好了):

var fp=new Ext.form.FormPanel({
title:'用户登录',
width:300,
bodyStyle:'padding:5px 5px 0',
renderTo:'divFormPanel',
frame:true,
items:[new Ext.form.Radio({
boxLabel:'男',
name:'sex',
id:'male'
}),new Ext.form.Radio({
boxLabel:'女',
name:'sex',
id:'sex_female'
})
]                
}); 

上面这个例子很简单(不太好看,因为到这里还没有说到form中相关控件,所以没有在布局上花功夫),也很容易理解,就是Radio控件吗。但是我修改过inputType之后呢:

var fp=new Ext.form.FormPanel({
title:'用户登录',
width:300,
bodyStyle:'padding:5px 5px 0',
renderTo:'divFormPanel',
frame:true,
items:[new Ext.form.Radio({
boxLabel:'男',
inputType:'textfield',
name:'sex',
id:'male'
}),new Ext.form.Radio({
boxLabel:'女',
inputType:'file',
name:'sex',
id:'sex_female'
})
]                
}); 

可以说上面的代码如果对于初学者来说肯定想不到一个radio变成了textfield,另一个变成了file。不是创建的Radio对象吗?怎么成了其他的控件,这个就是Ext中inputType的特殊之处。

好了,就先到这里吧!

时间: 2024-10-26 07:12:06

ExtJs之FormPanel篇的相关文章

ExtJs之Panel篇

曾有人说:如果Ext没有panel就没有现在Ext的存在.当然不管这句话正确与否至少说明Panel在Ext中还是有一定的分量的,Panel的子类比较多,例如TabPanel.GridPanel.FormPanel.TressPanel,我们今后会一一学习,今天我们就来看看Ext中关于Panel的基本内容. 还是先看代码和效果再做解释:   var panel=new Ext.Panel({ id:"myPanel",//标识 renderTo:"divPanel",

ExtJS之布局篇 .

Ext布局总的来说是很灵活的,因此我觉得有必要一块探讨一下. Ext常用的布局都在Ext.layout下,这里几乎涵盖了所有的布局方式(但是值得注意的是通常我们不是直接通过"new"来创建这些类的对象然后往里面添加控件使用,而是作为控件一个配置属性使用让Ext自动创建对应的类),满足开发者需求.那么我们就其中常用的方式逐一介绍. Border布局 Border布局是Ext中常用布局方式(经常用到整个页面的总体布局),感觉用的几率很大.在看代码之前先熟悉一种特殊的容器ViewPort,它

ExtJS的formPanel提交后,不能执行success。

问题描述 extJS代码:form.submit(){url:xxxxServlet,method:post,success:{....}failer:{....}}程序能够提交到Servlet,但是servlet的post方法执行完以后.用response的输出:writer.print("{success:true}");结果ExtJS的success不执行.提示{success:true}返回类型不匹配错误.请各位大侠帮忙.求解.谢谢 解决方案 解决方案二:返回类型不配置?你在哪

ExtJs 4 FormPanel进度条(Wait mask)灰色蒙版不能正常隐藏的BUG

首先必须知道例外两个方法 Ext.MessageBox.hide()和Ext.MessageBox.updateProgress(value,"ProgressText","msg")(三个参数,看名字就知道意思),    注意value为0-1之间的数,表示进度条的进度. 第一种:(通过进度的大小控制进度,满进度为1) 代码  代码如下 复制代码 function Read4() { var progressBar=Ext.Msg.show({ title:&qu

ExtJs学习笔记(20)-利用ExtJs的Ajax与服务端WCF交互

ExtJs是一套非常不错的javascript UI库(第一次接触ExtJs的,可到官方网站http://www.extjs.com/deploy/dev/examples/samples.html看下示例.相信不少人会心动的),不仅组件丰富,效果漂亮,而且ExtJs集成的Ajax功能可以方便的与.Net的WCF进行交互. 这里我们将演示ExtJs的FormPanel从WCF加载数据,以及如何提交数据到WCF服务端 1.首先来定义一个用于传输信息的Class(实际开发中,可以是Linq to S

ExtJs2.0学习系列(7)--Ext.FormPanel之第四式(其他组件示例篇)

N久没有写extjs的,作为一个新手,我为我的这种懒惰行为感到惭愧! 鉴于有朋友反应前面的文章过于简单,我决定以后的文章如果没有闪光点就放在新手区(如果不适合,请跟帖),不放在首页! 11.checkbox简单示例 效果图: js代码: Ext.onReady(function(){ Ext.QuickTips.init(); var myform=new Ext.FormPanel({ frame:true, width:330, layout:"form", labelWidth:

ExtJs2.0学习系列(6)--Ext.FormPanel之第三式(ComboBox篇)

前言:说句实话,此extjs系列的文章在博客园中的热度不高,可能是学这玩意的人不多吧,但是我觉得有这么个系列的文章对于中国朋友非常有帮助!请大家支持! 上篇ExtJs2.0学习系列(5)--Ext.FormPanel之第二式中我们讨论了下fieldset和表单验证的知识,今天我们接着深入解析表单元素中ComboBox组件的使用.会涉及 到.net简单服务器数据交互,但暂不做深入讨论,以后会详细分析服务器交互相关,不过可能要等较长一段时间,呵呵! 5.服务器数据作为ComboBox的数据源实例 首

ExtJS与.NET结合开发实例(Grid之数据显示、分页、排序篇)

最近有很多朋友关心ExtJS,我最近写了一个项目管理工具用到ExtJS,我结合 .NET写了个关于Grid实现的一个实例供需要的朋友参考. 本实例开发环 境是:Windows XP + Sql Server 2005 + IIS6+VS 2008 Beta2(.NET Framework3.5) 实现步骤: 1.取数据源 这里是从数据库里 读取数据生产JSON的方式供ExtJS Grid调用. (1)用Scott Guthrie提供的 生产JSON格式的类,这篇文章可以访 问:http://we

ExtJS与.NET结合开发实例(Grid之批量删除篇)

上接ExtJS与.NET结合开发实例(Grid之数据显示.分页.排序篇),在此基础 上实现批量删除功能. 实现的步骤如下: 1. 用WebService实现 删除的功能(上篇有一园友提出用WebService实现,这里顺便说一下,取数据源 也可以用WebService,大家可以参考删除的WebService自行实现,我这里就不在 累述了) 新建一WebService文件,命名为:DeleteProject.asmx 代 码如下: DeleteProject.asmx.cs 1using Syst