--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: "保存" }

    ]

});

--Extjs Form布局

在Extjs Form中,默认的布局方式是layout: 'anchor'

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

}

长度限制

{

    xtype: "textfield",

    name: "UserName",

    fieldLabel: "用户名",

    allowBlank: false,

    maxLength: 10,

    minLength: 3,

    flex: 1

}

邮箱

{

    xtype: "textfield",

    name: "Email",

    fieldLabel: "Email",

    vtype: "email",

    flex: 1

}

自定义xtype

//验证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"

}

补充--Ext之DOM

Ext.Element(几乎对DOM的一切进行了彻底的封装)

1.Ext.get(Ext.Element.get)  使用了缓存机制来提升获取DOM节点的效率  返回的是Ext.Element()

首先去缓存找  如果缓存里有  直接返回即可;  如果缓存里没有  那再去页面上查找  

如果页面没有  返回null   如果页面里有  把当前内容加入到缓存里

var d1 = Ext.get('d1');

alert(d1.dom.innerHTML);

2.Ext.fly(Ext.Element.fly)  使用了经典的享元模式 从而节约内存  更加低碳化

返回的是Fly对象   可以理解为 Ext.Element对象

var d2 = Ext.get('d2');

var d3 = Ext.get('d3');//由于使用了享元模式 只适合一次操作  从而节省内存

d2.dom.innerHTML = ‘AAA';

d3.dom.innerHTML = ‘BBB';

3.Ext.getDom()  直接返回HTMLElement元素

Ext.DomHelper(他是一个强大的操作UI界面的工具类)

Ext..DomQuery(用来进行DOM节点的查询)

ExtJs之表单(form)的更多相关文章

  1. HTML ------ 关于表单 Form

    Form(表单)主要用于采集和提交用户输入的信息,是页面与WEB服务器交互过程中 最重要的信息来源. 掌握表单(Form)有以下几个要点: 重要form属性 form常用控件 form提交方式 § 重 ...

  2. Bootstrap~表单Form

    回到目录 在进行自己的后台改版时,大体布局都使用了bootstrap,剩下的表单部分没理由不去使用它,对于表单的美化和布局,bootstrap做的也是很不错的,有大气的边框,多功能的按钮及宏观的表单布 ...

  3. 表单 - Form - EasyUI提供的表单异步提交

    方案一 被提交的表单 <form id="loginForm" method="post"> <table align="cente ...

  4. 跟服务器交互的Web表单(form)

    使用HTML来构建可以跟服务器交互的Web表单(form),通过给你的form元素添加一个action属性来达到此目的. action属性的值指定了表单提交到服务器的地址. 例如: <form ...

  5. 3、网页制作Dreamweaver(表单form)

    表单form (虚线不显示) 1.写法: <form id="form1" name="form1" method="post" ac ...

  6. DHTMLX 前端框架 建立你的一个应用程序 教程(九)--绑定表单Form到表格Grrid中

    绑定表单Form到表格Grrid中 现在我们需要选中一行表格数据的时候 数据能在表单中显示出来 我们可以使用DHTMLX 丰富的组件功能实现它. 绑定表单到表格 1.调用bind方法将表单绑定到网格, ...

  7. DHTMLX 前端框架 建立你的一个应用程序 教程(八)-- 添加表单Form

    添加表单Form 我们下一步是在页面中添加一个表单,表格中的选中字段将会显示在表单中.提供一个提交按钮 可以对显示的数据进行修改提交. 添加表单到布局单元格中 1.在右侧布局中使用attachForm ...

  8. 微信小程序基础之表单Form的使用

    表单Form的应用很广泛,我们可以利用form设计登录注册,也可以设计一种答题问卷的形式,今天主要讲一下form的使用 form表单,将组件内输入的"switch","i ...

  9. HTML(七)HTML 表单(form元素介绍,input元素的常用type类型,input元素的常用属性)

    前言 表单是网页与用户的交互工具,由一个<form>元素作为容器构成,封装其他任何数量的表单控件,还有其他任何<body>元素里可用的标签 表单能够包含<input> ...

随机推荐

  1. 2015/8/31 Python基础(5):字符串

    字符串是Python最常见的一种类型.通过在引号间包含字符的方式创建它.Python里单双引号的作用是一致的.Python的对象类型里不存在字符型,一般用单个字符的字符串来使用.Python的字符串是 ...

  2. 梳排序Comb sort

    梳排序还是基于冒泡排序,与冒泡不同的是,梳排序比较的是固定距离处的数的比较和交换,类似希尔那样 这个固定距离是待排数组长度除以1.3得到近似值,下次则以上次得到的近似值再除以1.3,直到距离小至3时, ...

  3. 【BZOJ】1585: [Usaco2009 Mar]Earthquake Damage 2 地震伤害

    [题意]给定无向图,现在可能有一些点已经被删除,只给出信息是c个点未被删除且不能到达结点1,求最少的删除点个数. [算法]最小割 [题解]本题和1的区别是:1求的是最少的不能到达1的结点数,那么就把损 ...

  4. 【BZOJ】1602:[Usaco2008 Oct]牧场行走

    [算法]最近公共祖先(LCA) [题解] 点x,y到最近公共祖先z的距离之和相当于x,y到根的距离减去两倍z到根的距离, 即ans=dis[x]+dis[y]-2*dis[z] 记得边数组要开两倍!! ...

  5. CSUST选拔赛题解

    本鶸鸡于本月10号参加了蔽校的选拔赛,成绩差的死,大部分的题都是赛后花了好长时间才补出来的,其中有些题还是靠QAQorz大佬帮忙才能解决,感谢Qls对我的帮助~接下来就附带上我的暴力题解,大佬们有更好 ...

  6. Perl6 Bailador框架(8):自定义400/500

    第一种方法, 直接写在源码中: use Bailador; get '/' => sub { '<h1>hello, Bailador</h1>'; } get '/te ...

  7. Django rest framework + Vue简单示例

    构建vue项目参考这篇文章https://segmentfault.com/a/1190000008049815 一.创建Vue项目 修改源:npm config set registry https ...

  8. linux编程之多线程编程

    我们知道,进程在各自独立的地址空间中运行,进程之间共享数据需要用mmap或者进程间通信机制,有些情况需要在一个进程中同时执行多个控制流程,这时候线程就派上了用场,比如实现一个图形界面的下载软件,一方面 ...

  9. monkey测试===monkeyrunner测试教程(2)

    我先引入一段代码: #test.py from com.android.monkeyrunner import MonkeyRunner as mr device=mr.waitForConnecti ...

  10. 网络知识===wireshark抓包数据分析(一)

    wireshark分析: 上图是我进行一个HTTP协议的下载,文件内容大概是1.7M左右. 抓包数据: https://files.cnblogs.com/files/botoo/wireshark% ...