Extjs Form用法詳解(適用於Extjs5)

來源:互聯網
上載者:User

標籤:style   http   color   io   os   使用   ar   for   資料   

Extjs Form是一個比較常用的控制項,主要用來顯示和編輯資料的,今天這篇文章將介紹Extjs Form控制項的詳細用法,包括建立Form、添加子項、載入和更新資料、驗證等。

本文的範例程式碼適用於Extjs 4.x和Extjs 5.x,在Extjs 4.2.1 和Extjs 5.0.1中親測可用!

本文由齊飛([email protected])原創,並發布在http://www.qeefee.com/article/extjs-form-in-detail,轉載請註明出處!推薦更多Extjs教程、Extjs5教程

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,可以在伺服器端擷取到。

本文由齊飛([email protected])原創,並發布在http://www.qeefee.com/article/extjs-form-in-detail,轉載請註明出處!推薦更多Extjs教程、Extjs5教程

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"}

效果:

本文由齊飛([email protected])原創,並發布在http://www.qeefee.com/article/extjs-form-in-detail,轉載請註明出處!推薦更多Extjs教程、Extjs5教程

Extjs Form用法詳解(適用於Extjs5)

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.