Extjs學(xué)習(xí)筆記之三 extjs form更多的表單項(xiàng)
更新時(shí)間:2010年01月07日 18:13:12 作者:
本文接著上講Extjs學(xué)習(xí)筆記之二 Extjs之Form介紹Extjs的表單。Extjs除了類似普通的html form的表單項(xiàng)之外,還有一些功能更為豐富實(shí)用的表單項(xiàng)。
1.日期選擇框,DateField
日期選擇框在日常項(xiàng)目中被廣泛應(yīng)用,一個(gè)方便的日期輸入機(jī)制能夠極大的提高用戶體驗(yàn)。Extjs的DateField非常友好靈活強(qiáng)大??梢酝ㄟ^如下代碼新建一個(gè)日期選擇框:
new Ext.form.DateField({
id: 'diliveryDate',
format: 'Y年m月d日',
maxValue: new Date(),
minValue: '1900-01-01',
disabledDays: [0, 6],
disabledDaysText: '禁止選擇該日期',
fieldLabel: '選擇日期',
width:200,
showToday:false
})
效果如下:
注意,默認(rèn)情況下,這個(gè)日歷顯示的是英文,如果需要顯示中文,需要引入?yún)^(qū)域文件:
<script type="text/javascript" src="ext-3.1.0/src/locale/ext-lang-zh_CN.js"></script>對(duì)其他控件應(yīng)該也是類似的。2.HTML編輯器,HTMLEditor
HTML編輯器可以使客戶編輯html文檔。啟用HTML編輯器非常簡(jiǎn)單,而且?guī)缀醪恍枰~外的配置,默認(rèn)的就很好用:
new Ext.form.HtmlEditor({
id:'HtmlContent',
autoHeight:false,
width:500,
fieldLabel:'HTML編輯'
})
遺憾的是這個(gè)編輯器不支持圖文混排,不過對(duì)于輕量級(jí)的應(yīng)用來(lái)說還是很好用的。如果需要圖文混排還是使用專門的第三方的插件好了。
3.組合框, ComboBox
這是一個(gè)重量級(jí)的控件,因?yàn)樗趯?shí)際應(yīng)用中起著廣泛而重要的作用。雖然它的使用頻率沒有TextField高,但是它的功能卻比TestField豐富的多,所以把它放在比較靠后的位置來(lái)介紹。Extjs的ComboBox具有下拉提示,自動(dòng)完成等功能,也同時(shí)支持本地和服務(wù)器端的數(shù)據(jù)源。下面先看一個(gè)本地?cái)?shù)據(jù)源的示例。
本地?cái)?shù)據(jù)源可以放在一個(gè)ArrayStore中,這是一個(gè)類似一個(gè)數(shù)組的結(jié)構(gòu)。例如,可以定義下面的store:
var store = new Ext.data.ArrayStore({
fields: ['Name', 'Code'],
data: [['開發(fā)部', 1], ['行政部', 2], ['銷售部', 3], ['質(zhì)檢部', 4], ['售后部', 5]]
});下面就可以添加一個(gè)combobox,var myform = new Ext.FormPanel({
applyTo: 'myform',
title: 'ComboxBox with local datasource',
height: 200,
width: 300,
frame: true,
labelSeparator: ':',
labelWidth: 60,
labelAlign: 'right',
items: [new Ext.form.ComboBox({
id:'combolocal',
fieldLabel:'部門',
triggerAction:'all',
store:store,
displayField:'Name',
mode:'local',
forceSelection:true,
typeAhead:true,
resizable:true})
]
});
其中比較重要的配置項(xiàng)有displayField,對(duì)應(yīng)的是datastore中的fields,用來(lái)指定顯示哪個(gè)字段。mode,在這里是local,表示本地?cái)?shù)據(jù)源。typeAhead表示是否自動(dòng)完成,forceSelection表示是否僅允許用戶輸入下拉列表中有的數(shù)據(jù)。效果如下,下圖展示了自動(dòng)完成,我僅在輸入框中輸入了一個(gè)“開”字:
使用遠(yuǎn)程數(shù)據(jù)也是類似的,不過我們首先要準(zhǔn)備好一個(gè)能夠返回?cái)?shù)據(jù)的服務(wù)器頁(yè)面,新建一個(gè)combo.ashx代碼如下:
public class combo : IHttpHandler {
public void ProcessRequest (HttpContext context) {
string query = context.Request.Params["search"];
StringBuilder sb = new StringBuilder("[");
foreach (string s in data)
if (s.Contains(query)||query=="all") sb.Append(s+",");
if(sb[sb.Length-1]==',')
sb.Remove(sb.Length - 1, 1);
sb.Append("]");
context.Response.ContentType = "text/plain";
context.Response.Write(sb.ToString());
}
string[] data=new string[]{"['開發(fā)部', 1]","['行政部', 2]", "['銷售部', 3]", "['質(zhì)檢部', 4]", "['售后部', 5]"};
public bool IsReusable {
get {
return false;
}
}}
此段程序根據(jù)客戶端傳來(lái)的參數(shù)進(jìn)行篩選,再傳回?cái)?shù)據(jù),如果參數(shù)值是all,則返回全部數(shù)據(jù)??梢姺?wù)器端的自動(dòng)完成可以比本地的更自由,當(dāng)然速度也會(huì)更慢。這個(gè)例子中服務(wù)器傳回的一個(gè)符合格式的javascript數(shù)組,在實(shí)際開發(fā)中,有更好的數(shù)據(jù)傳送格式可以選擇,本文的討論重點(diǎn)不是數(shù)據(jù)的傳遞,因此就直接采用這種方式作為示例。接下來(lái)配置下客戶端的datastore:
var remoteStore=new Ext.data.ArrayStore({
fields: ['Name', 'Code'],
proxy:new Ext.data.HttpProxy({url:'Combo.ashx'})
});最后就可以創(chuàng)建一個(gè)使用遠(yuǎn)程數(shù)據(jù)源的combobox了:new Ext.form.ComboBox({
id: 'comboremote',
allQuery:'all',
fieldLabel: '遠(yuǎn)程部門',
triggerAction: 'all',
mode: 'remote',
queryParam:'search',
displayField:'Name',
store:remoteStore,
minChars:1})
其中minChars表示用戶至少要輸入多少字后才開始自動(dòng)完成,queryParam是向服務(wù)器傳遞參數(shù)的名字,allQuery是要求返回全部數(shù)據(jù)時(shí)候的參數(shù)值。效果如下:

在remote模式下,combobox還支持服務(wù)器端分頁(yè),此時(shí)combox會(huì)向服務(wù)器傳遞start和limit參數(shù),表示要顯示的數(shù)據(jù)范圍,服務(wù)器端代碼做相應(yīng)處理后返回?cái)?shù)據(jù)即可。
日期選擇框在日常項(xiàng)目中被廣泛應(yīng)用,一個(gè)方便的日期輸入機(jī)制能夠極大的提高用戶體驗(yàn)。Extjs的DateField非常友好靈活強(qiáng)大??梢酝ㄟ^如下代碼新建一個(gè)日期選擇框:
復(fù)制代碼 代碼如下:
new Ext.form.DateField({
id: 'diliveryDate',
format: 'Y年m月d日',
maxValue: new Date(),
minValue: '1900-01-01',
disabledDays: [0, 6],
disabledDaysText: '禁止選擇該日期',
fieldLabel: '選擇日期',
width:200,
showToday:false
})
效果如下:
注意,默認(rèn)情況下,這個(gè)日歷顯示的是英文,如果需要顯示中文,需要引入?yún)^(qū)域文件:
<script type="text/javascript" src="ext-3.1.0/src/locale/ext-lang-zh_CN.js"></script>對(duì)其他控件應(yīng)該也是類似的。2.HTML編輯器,HTMLEditor
HTML編輯器可以使客戶編輯html文檔。啟用HTML編輯器非常簡(jiǎn)單,而且?guī)缀醪恍枰~外的配置,默認(rèn)的就很好用:
復(fù)制代碼 代碼如下:
new Ext.form.HtmlEditor({
id:'HtmlContent',
autoHeight:false,
width:500,
fieldLabel:'HTML編輯'
})
遺憾的是這個(gè)編輯器不支持圖文混排,不過對(duì)于輕量級(jí)的應(yīng)用來(lái)說還是很好用的。如果需要圖文混排還是使用專門的第三方的插件好了。
3.組合框, ComboBox
這是一個(gè)重量級(jí)的控件,因?yàn)樗趯?shí)際應(yīng)用中起著廣泛而重要的作用。雖然它的使用頻率沒有TextField高,但是它的功能卻比TestField豐富的多,所以把它放在比較靠后的位置來(lái)介紹。Extjs的ComboBox具有下拉提示,自動(dòng)完成等功能,也同時(shí)支持本地和服務(wù)器端的數(shù)據(jù)源。下面先看一個(gè)本地?cái)?shù)據(jù)源的示例。
本地?cái)?shù)據(jù)源可以放在一個(gè)ArrayStore中,這是一個(gè)類似一個(gè)數(shù)組的結(jié)構(gòu)。例如,可以定義下面的store:
復(fù)制代碼 代碼如下:
var store = new Ext.data.ArrayStore({
fields: ['Name', 'Code'],
data: [['開發(fā)部', 1], ['行政部', 2], ['銷售部', 3], ['質(zhì)檢部', 4], ['售后部', 5]]
});下面就可以添加一個(gè)combobox,var myform = new Ext.FormPanel({
applyTo: 'myform',
title: 'ComboxBox with local datasource',
height: 200,
width: 300,
frame: true,
labelSeparator: ':',
labelWidth: 60,
labelAlign: 'right',
items: [new Ext.form.ComboBox({
id:'combolocal',
fieldLabel:'部門',
triggerAction:'all',
store:store,
displayField:'Name',
mode:'local',
forceSelection:true,
typeAhead:true,
resizable:true})
]
});
其中比較重要的配置項(xiàng)有displayField,對(duì)應(yīng)的是datastore中的fields,用來(lái)指定顯示哪個(gè)字段。mode,在這里是local,表示本地?cái)?shù)據(jù)源。typeAhead表示是否自動(dòng)完成,forceSelection表示是否僅允許用戶輸入下拉列表中有的數(shù)據(jù)。效果如下,下圖展示了自動(dòng)完成,我僅在輸入框中輸入了一個(gè)“開”字:
使用遠(yuǎn)程數(shù)據(jù)也是類似的,不過我們首先要準(zhǔn)備好一個(gè)能夠返回?cái)?shù)據(jù)的服務(wù)器頁(yè)面,新建一個(gè)combo.ashx代碼如下:
復(fù)制代碼 代碼如下:
public class combo : IHttpHandler {
public void ProcessRequest (HttpContext context) {
string query = context.Request.Params["search"];
StringBuilder sb = new StringBuilder("[");
foreach (string s in data)
if (s.Contains(query)||query=="all") sb.Append(s+",");
if(sb[sb.Length-1]==',')
sb.Remove(sb.Length - 1, 1);
sb.Append("]");
context.Response.ContentType = "text/plain";
context.Response.Write(sb.ToString());
}
string[] data=new string[]{"['開發(fā)部', 1]","['行政部', 2]", "['銷售部', 3]", "['質(zhì)檢部', 4]", "['售后部', 5]"};
public bool IsReusable {
get {
return false;
}
}}
此段程序根據(jù)客戶端傳來(lái)的參數(shù)進(jìn)行篩選,再傳回?cái)?shù)據(jù),如果參數(shù)值是all,則返回全部數(shù)據(jù)??梢姺?wù)器端的自動(dòng)完成可以比本地的更自由,當(dāng)然速度也會(huì)更慢。這個(gè)例子中服務(wù)器傳回的一個(gè)符合格式的javascript數(shù)組,在實(shí)際開發(fā)中,有更好的數(shù)據(jù)傳送格式可以選擇,本文的討論重點(diǎn)不是數(shù)據(jù)的傳遞,因此就直接采用這種方式作為示例。接下來(lái)配置下客戶端的datastore:
復(fù)制代碼 代碼如下:
var remoteStore=new Ext.data.ArrayStore({
fields: ['Name', 'Code'],
proxy:new Ext.data.HttpProxy({url:'Combo.ashx'})
});最后就可以創(chuàng)建一個(gè)使用遠(yuǎn)程數(shù)據(jù)源的combobox了:new Ext.form.ComboBox({
id: 'comboremote',
allQuery:'all',
fieldLabel: '遠(yuǎn)程部門',
triggerAction: 'all',
mode: 'remote',
queryParam:'search',
displayField:'Name',
store:remoteStore,
minChars:1})
其中minChars表示用戶至少要輸入多少字后才開始自動(dòng)完成,queryParam是向服務(wù)器傳遞參數(shù)的名字,allQuery是要求返回全部數(shù)據(jù)時(shí)候的參數(shù)值。效果如下:

在remote模式下,combobox還支持服務(wù)器端分頁(yè),此時(shí)combox會(huì)向服務(wù)器傳遞start和limit參數(shù),表示要顯示的數(shù)據(jù)范圍,服務(wù)器端代碼做相應(yīng)處理后返回?cái)?shù)據(jù)即可。
您可能感興趣的文章:
- 用戶注冊(cè)常用javascript代碼
- javascript 清空form表單中某種元素的值
- js實(shí)現(xiàn)點(diǎn)擊注冊(cè)按鈕開始讀秒倒計(jì)時(shí)的小例子
- js簡(jiǎn)單實(shí)現(xiàn)用戶注冊(cè)信息的校驗(yàn)代碼
- form表單action提交的js部分與html部分
- Javascript和Java獲取各種form表單信息的簡(jiǎn)單實(shí)例
- jquery序列化form表單使用ajax提交后處理返回的json數(shù)據(jù)
- nodejs 實(shí)現(xiàn)模擬form表單上傳文件
- JS中的form.submit()不能提交表單的錯(cuò)誤原因
- 僅一個(gè)form表單 js實(shí)現(xiàn)注冊(cè)信息依次填寫提交功能
相關(guān)文章
Extjs Gird 支持中文拼音排序?qū)崿F(xiàn)代碼
本文為大家詳細(xì)介紹下Extjs Gird 支持中文拼音排序以及修復(fù)漢字排序異常的Bug、localeCompare比較漢字字符串,F(xiàn)irefox與IE均支持,感興趣的朋友可以參考下2013-04-04
Ext中下拉列表ComboBox組件store數(shù)據(jù)格式用法介紹
本文為大家詳細(xì)介紹下Ext中下拉列表ComboBox組件store數(shù)據(jù)格式的基本用法,感興趣的朋友可以參考下哈,希望對(duì)大家有所幫助2013-07-07
ExtJS 刷新后如何默認(rèn)選中刷新前最后一次選中的節(jié)點(diǎn)
這篇文章主要介紹了ExtJS 刷新后如何默認(rèn)選中刷新前最后一次選中的節(jié)點(diǎn),需要的朋友可以參考下2014-04-04
ExtJS4中使用mixins實(shí)現(xiàn)多繼承示例
在ExtJS4中使用mixins來(lái)實(shí)現(xiàn)多繼承,下面有個(gè)不錯(cuò)的示例,感興趣的朋友可以參考下2013-12-12
層序遍歷在ExtJs的TreePanel中的應(yīng)用
今天幫朋友解決了一個(gè)問題:使用ExtJs的TreePanel控件,如何得到樹的第一個(gè)葉子節(jié)點(diǎn)的信息。2009-10-10
ExtJs擴(kuò)展之GroupPropertyGrid代碼
這幾天做一個(gè)Web項(xiàng)目,使用了ExtJs,其中有個(gè)像設(shè)計(jì)器一樣的界面,選擇界面上的內(nèi)容,可以直接編輯內(nèi)容的屬性,這個(gè)原本來(lái)說對(duì)于使用ExtJs還是很簡(jiǎn)單的。2010-03-03
關(guān)于viewport,Ext.panel和Ext.form.panel的關(guān)系
那個(gè)深入淺出ext作者比我還懶 viewport存放Ext.panel對(duì)象,其容器中的成員可以以borderlayout方式布局2009-05-05

