国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 開發 > 綜合 > 正文

Ext2.0中的form使用實例

2024-07-21 02:14:03
字體:
來源:轉載
供稿:網友

Ext2.0的form不單增加了時間輸入控件、隱藏輸入控件,還修改了創建方法,通過formpanel代替了原來form,column也根據新的布局定義更新了定義方式。總體來說,定義一個form更簡單便捷了。本文將通過一個實例介紹一下2.0的form的創建以及其大部分控件的使用方法,因水平有限,錯漏難免,忘大家多多諒解!

我們先來看看我們將要設計的form的情況:

 

呵呵,form有點雜亂,不過在這個fomr里包含了絕大部分Ext2.0的控件,我將會和大家一起探討一下這些控件的使用。

在創建一個form之前,我們先增加以下語句:

Ext.QuickTips.init();
Ext.form.Field.prototype.msgTarget = 'side';

 第一句的目的是為需要的元件提供提示信息功能,form的主要提示信息就是客戶端驗證的錯誤信息了。

第二句的目的就是設置控件的錯誤信息顯示位置,主要可選的位置有:

位置值

描述

qtip

當鼠標移動到控件上面時顯示提示

title

在瀏覽器的標題顯示,但是測試結果是和qtip一樣的

under

在控件的底下顯示錯誤提示

side

在控件右邊顯示一個錯誤圖標,鼠標指向圖標時顯示錯誤提示

[element id]

錯誤提示顯示在指定id的HTML元件中

這個大家可以根據各人喜好設置,我習慣使用“side”,這里有一點要注意的,就是注意控制控件的寬度,以防不夠寬度顯示錯誤圖標,這個下面會說到。

好了,現在創建我們的form,2.0的方法就是直接創建一個formpanel:

 var simpleForm = new Ext.FormPanel({
labelAlign: 'left',
title: '表單例子',
buttonAlign:'right',
bodyStyle:'padding:5px',
width: 600,
frame:true,
labelWidth:80,
items: [],
buttons: []
});
simpleForm.render(document.body);

在formpanle里,我們定義了form控件的標題是在左邊的(labelAlign: 'left');form的標題欄顯示標題“表單的例子”;它的按鈕位置是在右對齊的(buttonAlign:'right');邊的類型設置了內補丁5px(bodyStyle:'padding:5px');總寬度是600px;設置了面板的邊角是圓弧過度的(frame:true),我設置這個屬性主要目的不是因為邊角,而是因為背景,如果不設置這個,背景顏色將為白色,設置了這個將會加入海藍色的背景圖,好看點;還設置了form控件的標題寬度是80px(labelWidth:80)。還有一些其它的設置選項,我這里就不多說,大家可以參看2.0的API。

items數組的設置是我們的重點了,form上的所有控件都是在這里設置的。

從form的結構圖中看到,form整體上是分了兩列的(實際上不是的,呵呵)。因為要分列,所以要使用columnLayout類。在使用columnLayout類之前,我們需要了解一下CSS中float屬性的作用,改屬性主要作用是設置對象是否及如何浮動,屬性值為none、left和right三個。column設置是left,意思就是對象浮在左邊的。那這個有什么作用呢?其實這個和我們在word中輸入文字,默認文字是左對齊的,當一行文字的寬度超過頁面的寬度時將自動換行是一樣的。 我們通過一個例子來說明一下。

首先我們定義一個div,背景色是黑色,寬度和高度都是200:

 <div style='background:black;width:200px;height:200px;'>
</div>

然后在里面加入2個div,每個寬度和高度都是200,背景色一個是紅色,一個是綠色:

<div style='background:black;width:200px;height:200px;'>
<div style='background:red;width:50px;height:50px;'></div>
<div style='background:green;width:50px;height:50px;'></div>
</div>

我們來看看效果:

 

在沒有使用float之前,兩個子div是分別各占一行的。好,現在我們在兩個子div中加入“float:left”在看看效果:

<div style='background:black;width:200px;height:200px;'> 

<div style='background:red;width:50px;height:50px;float:left;'></div>

<div style='background:green;width:50px;height:50px;float:left;'></div>

</div>

兩個子div出現在同一行了。我們復制一下兩個子div,粘貼兩次,然后看看效果:

 <div style='background:black;width:200px;height:200px;'>
<div style='background:red;width:50px;height:50px;float:left;'></div>
<div style='background:green;width:50px;height:50px;float:left;'></div>
<div style='background:red;width:50px;height:50px;float:left;'></div>
<div style='background:green;width:50px;height:50px;float:left;'></div>
<div style='background:red;width:50px;height:50px;float:left;'></div>
<div style='background:green;width:50px;height:50px;float:left;'></div>
</div>

 6個子div有序的按左對齊方式排列在一起了,當一行的子div的寬度超過了父div的寬度時,子div自動換行到了第二行。

不知道大家是否看得明白?看不明白自己再動手改變一下子div的寬度和高度,看看效果。column的工作方式就是這樣的。明白這個很重要,因為在定義checkbox和radio的時候,如果想它們的選項在同一行,就要注意column的寬度,不然就無法讓他們在同一行。不過現在column是通過百分比來定義寬度的,我們只要控制好百分比就行了。

好了,我們繼續寫form,因為要用到column,所以我們先在formpanel的itmes加入一個column的定義:

{
layout:'column',
border:false,
labelSeparator:':',
items:[]
}

 代碼里定義了在這里使用的是columnlayout(layout:'column');沒有邊(border:false);標題的分隔符號我們用中文冒號代替英文的冒號(labelSeparator:':')。coulmnLayout里的控件將定義在items里。

我們首先在items里加入一個常用輸入控件,是用來輸入姓名的:

{
columnWidth:.5,
layout: 'form',
border:false,
items: [{
xtype:'textfield',
fieldLabel: '姓名',
name: 'name',
anchor:'90%'
}]
}

 我們設置了該列的寬度占總寬度的50%(columnWidth:.5);在布局里放了一個formlayout用來放置控件(layout: 'form');formlayout也是沒有邊的(border:false)。在formlayout里有一個類型為textfield'(xtype:'textfield')的輸入控件。控件標題為姓名(fieldLabel: '姓名'),輸入框(input)的name屬性設置“name”(name: 'name'),輸入框的長度為列寬減去標題的寬度后的90%(anchor:'90%'),余下的10%的是給顯示錯誤信息圖標用的。

在加入性別的radio控件時就要注意了,這里需要加入兩個radio,第一radio是有標題的,第二是沒有的,而且兩個radio加起來的寬度應該正好是余下的列寬(50%):

 從代碼中可以看到,除了列寬設置為25%外,其它的列設置和第一控件是一樣。Formlayout里加入了一個類型為radio的控件。控件的標題是性別,控件的選擇顯示文本是男(boxLabel:'男),input的name屬性值是sex(name: 'sex'),該控件默認是已選的(checked:true),控件的值(value)是男(inputValue:'男'),input的寬度是95%。在這里我還設置一個css屬性,頂部的外補丁為5px(style:'margin-top:5px'),原因是為了選擇按鈕和標題對齊,大家可以將該屬性去掉然后看看效果。

第二個raido控件的列設置就有所不同,因為它不需要標題,所以要設置隱藏標題(hideLabels:true),標題的寬度設置為0(labelWidth:0),還要設置其標題分隔符號為空(labelSeparator:'')。其余的設置和第一個radio的設置沒有不同,只是input的值不同了。

我們已經設置了3列,3列的列寬分別為50%、25%、25%,根據float的原則,下一列將從第二行開始。

在第二行第一列我們要增加的是一個日期選擇控件:

{

columnWidth:.25,

layout: 'form',

border:false,

items: [{

style:'margin-top:5px',

xtype:'radio',

fieldLabel: '性別',

boxLabel:'男',

name: 'sex',

checked:true,

inputValue:'男',

anchor:'95%'

}]

},{

columnWidth:.25,

layout: 'form',

labelWidth:0,

labelSeparator:'',

hideLabels:true,

border:false,

items: [{

style:'margin-top:5px',

xtype:'radio',

fieldLabel: '',

boxLabel:'女',

name: 'sex',

inputValue:'女',

anchor:'95%'

}]

}

{
columnWidth:.5,

layout: 'form',

border:false,

items: [{

xtype:'datefield',

fieldLabel: '出生日期',

name: 'birthday',

anchor:'90%'

}]

}
日期控件的列寬也是50%,列的其它設置沒有變化。控件的類型為datefield,標題是出生日期,input的name屬性是birthday,intput寬度也是設置了90%,出來留出空位給錯誤信息外,還可以讓控件與上一行的姓名的寬度相同,整列看起來比較整齊。

日期控件的設置和普通文本輸入的設置一樣簡單,這里就不多說了。不過要說到的是漢化的問題。在2.0版自帶的本地化文件ext-lang-zh.js中存在一些小bug,我們需要自己修改一下。

首先要修改的是周的顯示,原來的定義是:

 因為在日期選擇中顯示的區域不夠寬,只能顯示一個漢字,所以需要將上面定義的把“周”去掉,修改為:

Date.dayNames = [ 

"周日",

"周一",

"周二",

"周三",

"周四",

"周五",

"周六"

];

 Date.dayNames = [
"日",
"一",
"二",
"三",
"四",
"五",
"六"
];

在年份和月份選擇中的按鈕文字還是英文“ok”和“cancel”的,這里我們也需要修改一下:

 if(Ext.DatePicker){
Ext.apply(Ext.DatePicker.prototype, {
todayText : "今天",
minText : "日期在最小日期之前",
maxText : "日期在最大日期之后",
disabledDaysText : "",
disabledDatesText : "",
monthNames : Date.monthNames,
dayNames : Date.dayNames,
nextText : '下月 (Control Right)',
prevText : '上月 (Control Left)',
monthYearText : '選擇一個月 (Control Up/Down 來改變年)',
todayTip : "{0} (Spacebar)",
okText : "確定",
cancelText : "取消",
format : "y年m月d日"
});
}

上面定義中黑色字體部分就是要加入的代碼。如果不喜歡默認格式是“y年m月d日”,需要修改:

 if(Ext.form.DateField){
Ext.apply(Ext.form.DateField.prototype, {
disabledDaysText : "禁用",
disabledDatesText : "禁用",
minText : "該輸入項的日期必須在 {0} 之后",
maxText : "該輸入項的日期必須在 {0} 之前",
invalidText : "{0} 是無效的日期 - 必須符合格式: {1}",
format : "Y-m-d"
});
}
修改DatePicker不會改變DateField的格式的,這個自己根據情況決定,呵呵。

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 嘉荫县| 万全县| 邵武市| 维西| 藁城市| 芜湖市| 怀柔区| 大田县| 孝昌县| 建瓯市| 隆回县| 祥云县| 常宁市| 墨脱县| 长兴县| 南通市| 竹山县| 大足县| 礼泉县| 德州市| 郑州市| 从江县| 云浮市| 新干县| 三江| 边坝县| 蓬莱市| 洛浦县| 蒲江县| 萝北县| 张家川| 长宁县| 大悟县| 镇康县| 炉霍县| 鄂托克前旗| 玛沁县| 田林县| 汤原县| 呼伦贝尔市| 五华县|