Extjs Form用法详解(适用于Extjs5)
Extjs Form是一个比较常用的控件,主要用来显示和编辑数据的,今天这篇文章将介绍Extjs Form控件的详细用法,包括创建Form、添加子项、加载和更新数据、验证等。
本文的示例代码适用于Extjs 4.x和Extjs 5.x,在Extjs 4.2.1 和Extjs 5.0.1中亲测可用!
Form和Form Basic
Extjs Form和Form Basic是两个东西,Form提供界面的展示,而Form Basic则提供数据的处理、验证等功能。每一个Form Panel在创建的时候,都会绑定一个Form Basic,我们可以通过方法getForm来获取:
form.getForm()
在API方面,Form的config中没有显示Form Basic的config,但是Form Basic的config在Form的config中完全有效,也就是说,当我们使用Extjs Form的时候,不仅仅要查看Form的API文档,还要浏览相关的Form Basic的文档。
创建Extjs Form控件
var form = Ext.create("Ext.form.Panel", {
width: 500,
height: 300,
margin: 20,
title: "Form",
renderTo: Ext.getBody(),
collapsible: true, //可折叠
autoScroll: true, //自动创建滚动条
defaultType: 'textfield',
defaults: {
anchor: '100%',
},
fieldDefaults: {
labelWidth: 80,
labelAlign: "left",
flex: 1,
margin: 5
},
items: [
{
xtype: "container",
layout: "hbox",
items: [
{ xtype: "textfield", name: "name", fieldLabel: "姓名", allowBlank: false },
{ xtype: "numberfield", name: "age", fieldLabel: "年龄", decimalPrecision: 0, vtype: "age" }
]
},
{
xtype: "container",
layout: "hbox",
items: [
{ xtype: "textfield", name: "phone", fieldLabel: "电话", allowBlank: false, emptyText: "电话或手机号码" },
{ xtype: "textfield", name: "phone", fieldLabel: "邮箱", allowBlank: false, emptyText: "Email地址", vtype: "email" }
]
},
{
xtype: "textareafield",
name: "remark",
fieldLabel: "备注",
height: 50
}
],
buttons: [
{ xtype: "button", text: "保存" }
]
});
以上代码将创建一个Form表单,效果如下:

Extjs Form布局
在Extjs Form中,默认的布局方式是layout: 'anchor',具体的Extjs 布局可以参考我的Extjs 布局系统详解这篇文章。
anchor默认每行只显示一个控件,如果我们要在一行中显示多个,需要将这些控件放在一个container中,并设置container的layout为hbox。
Extjs Form加载数据
Form可以加载Model数据,也可以加载Json数据,这样我们可以方便的将json或者record数据显示在Extjs Form控件中。
加载Record数据
Extjs Form通过方法loadRecord加载record,代码如下:
var userRecord = Ext.create("MyApp.model.User", {
name: "Tom",
age: 25,
phone: "123456"
});
form.loadRecord(userRecord);
加载Json数据
Extjs Form可以通过调用formbasic的setValues方法来加载json数据,代码如下:
var data = {
name: "Tom",
age: 25,
phone: "123456"
};
form.getForm().setValues(data);
Extjs Form获取与更新数据
通过上面的方法,我们可以为Form加载record或json数据。当我们完成编辑之后,还需要获取编辑后的数据,或者将编辑后的数据更新到对应的record中,Extjs Form提供了相应的方法来完成这些操作。
如果Extjs Form加载的是record:
form.updateRecord();
如果Extjs Form加载的是json数据:
form.getForm().getValues()
Extjs Form异步加载与提交
Extjs Form除了可以加载页面中已存在的数据外,还可以通过Ajax的方式异步加载与提交数据。这种方法不太常用。
异步加载
form.getForm().load({
url: "form-data.ashx"
});
服务器返回的数据格式如下:
{
success:true,
data:{
name: "Tom",
age: 25,
phone: "123456"
}
}
异步提交
form.submit({
url: "form-submit.ashx",
success: function (form, action) {
Ext.Msg.alert('Success', action.result.msg);
}
});
submit方法提交的数据为Form中的所有value,可以在服务器端获取到。
Extjs Form验证
在所有开发语言中,客户端验证是必不可少的。Extjs Form也提供了客户端验证机制,我们可以通过vtype来实现客户端验证。接下来我们详细的了解一下Extjs的客户端验证。
必填项,就是不能为空(allowBlank)
效果:

代码:
{
xtype: "textfield",
name: "UserName",
fieldLabel: "用户名",
allowBlank: false,
flex: 1
}
输入长度限制,maxLength/minLength
效果:

&

代码:
{
xtype: "textfield",
name: "UserName",
fieldLabel: "用户名",
allowBlank: false,
maxLength: 10,
minLength: 3,
flex: 1
}
值大小限制,maxValue/minValue
值大小的限制常用于numberfield、datefield,可以指定一个可用值的范围。
效果:

&

代码:
{
xtype: "numberfield",
name: "Age",
fieldLabel: "年龄",
maxValue: 60,
minValue: 18,
flex: 1
}
vtype验证
vtype提供了一些公用的验证类型,它们包括:
- alpha:希腊数字
- alphanum:字母和数字
- email:电子邮件地址
- url:网址
这四种是extjs内置的,已经提供给我们可以直接来用的。我们拿email来进行示例。
效果:

代码:
{
xtype: "textfield",
name: "Email",
fieldLabel: "Email",
vtype: "email",
flex: 1
}
自定义vtype
上面介绍了vtype的简单用法,可以看到这种验证是非常好用的,但是小伙伴们不觉得extjs提供的vtype太少吗?
小伙伴们不要嫌弃,接下来我们看一下如何自定义vtype,代码:
//验证ip地址
Ext.apply(Ext.form.field.VTypes, {
IPAddress: function (v) {
return /^\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3}$/.test(v);
},
IPAddressText: '只能输入ip地址',
IPAddressMask: /[\d\.]/i
});
用法:
{
xtype: "textfield",
name: "ip",
fieldLabel: "IP地址",
vtype: "IPAddress"
}
效果:

Extjs Form用法详解(适用于Extjs5)的更多相关文章
- Extjs Window用法详解
今天我们来介绍一下Extjs中一个常用的控件Window.Window的作用是在页面中创建一个窗口,这个窗口作为容器,可以在它里面加入grid.form等控件,从而来实现更加复杂的界面逻辑. 本文的示 ...
- Extjs Window用法详解 3 打印具体应用,是否关掉打印预览的界面
Extjs Window用法详解 3 打印具体应用,是否关掉打印预览的界面 Extjs 中的按钮元素 {xtype: 'buttongroup',title: '打印',items: [me.ts ...
- Extjs GridPanel用法详解
Extjs GridPanel 提供了非常强大数据表格功能,在GridPanel可以展示数据列表,可以对数据列表进行选择.编辑等.在之前的Extjs MVC开发模式详解中,我们已经使用到了GridPa ...
- Extjs Window用法详解 2 打印具体应用
Extjs 中的按钮元素 { xtype: 'buttongroup', title: '打印', items: [ me.tsbDel = Ext.create('Ext.button.Button ...
- Vue1.0用法详解
Vue.js 不支持 IE8 及其以下版本,因为 Vue.js 使用了 IE8 不能实现的 ECMAScript 5 特性. 开发环境部署 可参考使用 vue+webpack. 基本用法 1 2 3 ...
- 【Ext.Net学习笔记】03:Ext.Net DirectEvents用法详解、DirectMethods用法详解
Ext.Net通过DirectEvents进行服务器端异步的事件处理.[Ext.Net学习笔记]02:Ext.Net用法概览.Ext.Net MessageBus用法.Ext.Net布局 中已经简单的 ...
- jQuery 事件用法详解
jQuery 事件用法详解 目录 简介 实现原理 事件操作 绑定事件 解除事件 触发事件 事件委托 事件操作进阶 阻止默认事件 阻止事件传播 阻止事件向后执行 命名空间 自定义事件 事件队列 jque ...
- install 命令用法详解
install 命令用法详解 http://man.linuxde.net/install install命令的作用是安装或升级软件或备份数据,它的使用权限是所有用户.install命令和cp命令类似 ...
- 1:CSS中一些@规则的用法小结 2: @media用法详解
第一篇文章:@用法小结 第二篇文章:@media用法 第一篇文章:@用法小结 这篇文章主要介绍了CSS中一些@规则的用法小结,是CSS入门学习中的基础知识,需要的朋友可以参考下 at-rule ...
随机推荐
- FMDB 使用方法
优秀的第三方库,README 也是很优秀的,理解了 README,会对使用带来很多便利. ARC 和 MRC 项目中使用 ARC 还是 MRC,对使用 FMDB 都没有任何影响,FMDB 会在编译项目 ...
- SQL 常见函数使用
1.字符串转化为整型 CONVERT(INT,'字符串') 2.结果集 输出为一段字符串 SELECT STUFF((SELECT ','+A FROM tableFOR XML PATH('')), ...
- 【转】【C#】SendMessage
SendMessage是一个在user32.dll中声明的API函数,在C#中导入如下: using System.Runtime.InteropServices; [DllImport(" ...
- [CareerCup] 7.1 Basketball Shooting Game 投篮游戏
7.1 You have a basketball hoop and someone says that you can play one of two games. Game 1: You get ...
- [CareerCup] 13.10 Allocate a 2D Array 分配一个二维数组
13.10 Write a function in C called my2DAlloc which allocates a two-dimensional array. Minimize the n ...
- poj1082-Calendar Game-博弈/sg
sg大法好 无脑sg即可,不用去找规律了. /*---------------------------------------------------------------------------- ...
- MVC5 + EF6 + Bootstrap3 (13) 查看详情、编辑数据、删除数据
Slark.NET-博客园 http://www.cnblogs.com/slark/p/mvc5-ef6-bs3-get-started-rud.html 系列教程:MVC5 + EF6 + Boo ...
- Django实际站点项目开发经验谈
开发了两个月的Django站点正式上线了,看着网站从无到有,从前端到后台,从本地开发到环境部署,一点一滴的堆砌成型,着实带给我不小的乐趣. Django站点介绍: 开发环境:阿里云服务器centos6 ...
- BinaryWrite方法输出验证码
在创建网站中验证码是不可或缺的.可以利用BinaryWrite输出二进制图像的方法输出验证码. 在开发图形验证码时,首先生成验证码,然后绘制成图像,最后通过该方法输出到页面中.所以熟练地掌握该方法可以 ...
- 程序员"青春饭"问题之我见
程序员"青春饭"问题之我见 声明:转载请注明出处.http://www.cnblogs.com/hzg1981/ 1. 问题描述 问题1: 什么是程序员? 在本文中程序员的定义 ...