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)用來說還是很好用的。如果需要圖文混排還是使用專門的第三方的插件好了。
3.組合框, ComboBox
這是一個(gè)重量級(jí)的控件,因?yàn)樗趯?shí)際應(yīng)用中起著廣泛而重要的作用。雖然它的使用頻率沒有TextField高,但是它的功能卻比TestField豐富的多,所以把它放在比較靠后的位置來介紹。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,用來指定顯示哪個(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ù)器頁面,新建一個(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ù)客戶端傳來的參數(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ù)的傳遞,因此就直接采用這種方式作為示例。接下來配置下客戶端的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ù)器端分頁,此時(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)用來說還是很好用的。如果需要圖文混排還是使用專門的第三方的插件好了。
3.組合框, ComboBox
這是一個(gè)重量級(jí)的控件,因?yàn)樗趯?shí)際應(yīng)用中起著廣泛而重要的作用。雖然它的使用頻率沒有TextField高,但是它的功能卻比TestField豐富的多,所以把它放在比較靠后的位置來介紹。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,用來指定顯示哪個(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ù)器頁面,新建一個(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ù)客戶端傳來的參數(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ù)的傳遞,因此就直接采用這種方式作為示例。接下來配置下客戶端的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ù)器端分頁,此時(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 3.3切換tab隱藏相應(yīng)工具欄出現(xiàn)空白解決
在切換tabpanel的時(shí)候,把相應(yīng)的工具欄隱藏掉,結(jié)果出現(xiàn)空白,先熊板板的空白不過后來終于解決,接下來與大家分享下解決技巧,感興趣的朋友可以參考下哈2013-04-04
Extjs 繼承Ext.data.Store不起作用原因分析及解決
有關(guān)Extjs 繼承Ext.data.Store 不起作用的原因有很多種,接下來與大家分享下,本人遇到的,這個(gè)Store寫出來之后 是不會(huì)起到作用的,感興趣的朋友可以看下詳細(xì)的原因及解決方法2013-04-04
Extjs中的GridPanel隱藏列會(huì)顯示在menuDisabled中解決方法
在Extjs中的GridPanel會(huì)有這樣的情況,隱藏列會(huì)顯示在menuDisabled中,但是這個(gè)一般沒有什么用處,只是用于后臺(tái)取值的作用,感興趣的朋友可以了解下啊,希望本文對(duì)你有所幫助2013-01-01
Extjs在exlipse中設(shè)置自動(dòng)提示的方法
spket最好用了,而且它還支持ext,安裝起來很簡(jiǎn)單.....2010-04-04
ExtJS GridPanel 根據(jù)條件改變字體顏色
ExtJS下GridPanel 根據(jù)條件改變字體顏色的實(shí)現(xiàn)代碼。2010-03-03
ExtJs 實(shí)現(xiàn)動(dòng)態(tài)加載grid完整示例
動(dòng)態(tài)加載grid在ExtJs中如何實(shí)現(xiàn),貌似有很多的朋友都不知道吧,下面有個(gè)不錯(cuò)的示例,希望對(duì)大家有所幫助2013-09-09
ExtJS Ext.MessageBox.alert()彈出對(duì)話框詳解
Ext.MessageBox是一個(gè)工具類,他繼承自O(shè)biect對(duì)象,用來生成各種風(fēng)格的信息提示對(duì)話框,Ext.Msg是該類的別名,使用Ext.MessageBox和用Ext.Msg效果是一樣的,而后者提供了更簡(jiǎn)單的方式。2010-04-04

