前面我们共介绍过10种表单组件,这些组件是我们在开发过程中最经常用到的,所以一定要用到非常熟练才可以,今天我们会通过一个员工信息表实例,再把这些组件串一下。
(1)TextField (2)Botton (3)NumberField (4)Hidden (5)DataFiedl (6)RadioGroup (7)CheckBoxGroup (8)Combobox (9)File (10)Editor
1.代码如下:
1 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> 2 <html xmlns="http://www.w3.org/1999/xhtml"> 3 <head> 4 <title></title> 5 <!--ExtJs框架开始--> 6 <script type="text/javascript" src="/Ext/adapter/ext/ext-base.js"></script> 7 <script type="text/javascript" src="/Ext/ext-all.js"></script> 8 <script src="/Ext/src/locale/ext-lang-zh_CN.js" type="text/javascript"></script> 9 <link rel="stylesheet" type="text/css" href="/Ext/resources/css/ext-all.css" /> 10 <style type="text/css"> 11 .x-form-unit 12 { 13 height: 22px; 14 line-height: 22px; 15 padding-left: 2px; 16 display: inline-block; 17 display: inline; 18 } 19 </style> 20 <!--ExtJs框架结束--> 21 <script type="text/javascript"> 22 23 //----------------------重写文本框开始----------------------// 24 Ext.override(Ext.form.TextField, { 25 unitText: '', 26 onRender: function (ct, position) { 27 Ext.form.TextField.superclass.onRender.call(this, ct, position); 28 // 如果单位字符串已定义 则在后方增加单位对象 29 if (this.unitText != '') { 30 this.unitEl = ct.createChild({ 31 tag: 'div', 32 html: this.unitText 33 }); 34 this.unitEl.addClass('x-form-unit'); 35 // 增加单位名称的同时 按单位名称大小减少文本框的长度 初步考虑了中英文混排 未考虑为负的情况 36 this.width = this.width - (this.unitText.replace(/[^\x00-\xff]/g, "xx").length * 6 + 2); 37 // 同时修改错误提示图标的位置 38 this.alignErrorIcon = function () { 39 this.errorIcon.alignTo(this.unitEl, 'tl-tr', [2, 0]); 40 }; 41 } 42 } 43 }); 44 //----------------------重写文本框结束----------------------// 45 46 Ext.onReady(function () { 47 //初始化标签中的Ext:Qtip属性。 48 Ext.QuickTips.init(); 49 Ext.form.Field.prototype.msgTarget = 'side'; 50 51 //------------第一列内容开始-------------// 52 //姓名 53 var txtusername = new Ext.form.TextField({ 54 width: 130, 55 allowBlank: false, 56 maxLength: 4, 57 name: 'username', 58 fieldLabel: '姓名', 59 blankText: '请输入姓名', 60 maxLengthText: '姓名不能超过4个字符' 61 }); 62 //政治面貌数据源 63 var combostore = new Ext.data.ArrayStore({ 64 fields: ['id', 'name'], 65 data: [[1, '团员'], [2, '党员'], [3, '其他']] 66 }); 67 //政治面貌下拉列表 68 var cobpolitical = new Ext.form.ComboBox({ 69 width: 130, 70 allowBlank: false, 71 fieldLabel: '政治面貌', 72 store: combostore, 73 displayField: 'name', 74 valueField: 'id', 75 triggerAction: 'all', 76 emptyText: '请选择...', 77 blankText: '请选择政治面貌', 78 editable: false, 79 mode: 'local' 80 }); 81 //毕业院校 82 var txtgraduateschool = new Ext.form.TextField({ 83 width: 130, 84 allowBlank: false, 85 maxLength: 10, 86 name: 'graduateschool', 87 fieldLabel: '毕业院校', 88 blankText: '请输入毕业院校', 89 maxLengthText: '毕业院校不能超过10个字符' 90 }); 91 //通信地址 92 var txtaddress = new Ext.form.TextField({ 93 width: 130, 94 allowBlank: false, 95 maxLength: 30, 96 name: 'address', 97 fieldLabel: '通信地址', 98 blankText: '请输入通信地址', 99 maxLengthText: '通信地址不能超过30个字符' 100 }); 101 //第一列包含4行 102 var column1 = { 103 columnWidth: .28, 104 layout: 'form', 105 items: [ 106 txtusername, cobpolitical, txtgraduateschool, txtaddress 107 ] 108 }; 109 //------------第一列内容结束-------------// 110 //------------第二列内容开始-------------// 111 //性别 112 var rdosex = new Ext.form.RadioGroup({ 113 fieldLabel: '性别', 114 width: 130, 115 style: 'padding-top:3px;height:17px;', 116 items: [{ name: 'sex', inputValue: '0', boxLabel: '男', checked: true }, { name: 'sex', inputValue: '1', boxLabel: '女'}] 117 }); 118 //身高 119 var numheight = new Ext.form.NumberField({ 120 fieldLabel: '身高', 121 width: 117, 122 decimalPrecision: 0, 123 minValue: 1, 124 maxValue: 400, 125 name: 'height', 126 unitText: ' cm', 127 allowBlank: false, 128 blankText: '请输入身高' 129 }); 130 //毕业专业 131 var txtprofessional = new Ext.form.TextField({ 132 width: 130, 133 allowBlank: false, 134 maxLength: 30, 135 name: 'professional', 136 fieldLabel: '毕业专业', 137 blankText: '请输入毕业专业', 138 maxLengthText: '毕业专业不能超过30个字符' 139 }); 140 //联系电话 141 var txtphone = new Ext.form.TextField({ 142 width: 130, 143 allowBlank: false, 144 maxLength: 20, 145 name: 'phone', 146 fieldLabel: '联系电话', 147 blankText: '请输入联系电话', 148 maxLengthText: '联系电话不能超过20个字符' 149 }); 150 //第二列包含4行 151 var column2 = { 152 columnWidth: .28, 153 layout: 'form', 154 items: [rdosex, numheight, txtprofessional, txtphone] 155 }; 156 //------------第二列内容结束-------------// 157 //------------第三列内容开始-------------// 158 //年龄 159 var numage = new Ext.form.NumberField({ 160 fieldLabel: '年龄', 161 width: 117, 162 decimalPrecision: 0, 163 minValue: 1, 164 maxValue: 60, 165 name: 'age', 166 unitText: ' 岁', 167 allowBlank: false, 168 blankText: '请输入年龄' 169 }); 170 //体重 171 var numweight = new Ext.form.NumberField({ 172 fieldLabel: '体重', 173 width: 117, 174 decimalPrecision: 0, 175 minValue: 1, 176 maxValue: 300, 177 name: 'age', 178 unitText: ' kg', 179 allowBlank: false, 180 blankText: '请输入体重' 181 }); 182 //毕业日期 183 var dategraduation = new Ext.form.DateField({ 184 fieldLabel: '毕业日期', 185 name: 'graduationdate', 186 width: 117, 187 format: 'Y-m-d', 188 editable: false, 189 allowBlank: false, 190 blankText: '请选择毕业日期' 191 }); 192 //第三列包含3行 193 var column3 = { 194 columnWidth: .25, 195 layout: 'form', 196 items: [numage, numweight, dategraduation] 197 }; 198 //------------第三列内容结束-------------// 199 //------------第四列内容开始-------------// 200 //创建div组件 201 var imagebox = new Ext.BoxComponent({ 202 autoEl: { 203 style: 'width:65px;height:60px;margin:0px auto;border:1px solid #ccc; text-align:center;padding-top:10px;margin-bottom:8px', 204 tag: 'div', 205 id: 'imageshow', 206 html: '暂无相片' 207 } 208 }); 209 var uploadbutton = new Ext.Button({ 210 text: '上传相片', 211 style: 'margin:0px auto;', 212 handler: function () { 213 alert('弹出新窗体上传相片!'); 214 } 215 }); 216 var column4 = { 217 columnWidth: .16, 218 layout: 'form', 219 items: [imagebox, uploadbutton] 220 }; 221 //------------第四列内容结束-------------// 222 //招聘来源 223 var checksource = new Ext.form.CheckboxGroup({ 224 fieldLabel: '招聘来源', 225 style: 'padding-top:3px;height:17px;', 226 items: [{ 227 boxLabel: '报纸招聘', 228 inputValue: '0' 229 }, { 230 boxLabel: '校园招聘', 231 inputValue: '1' 232 }, { 233 boxLabel: '人才市场', 234 inputValue: '2' 235 }, { 236 boxLabel: '招聘网站', 237 inputValue: '3' 238 }] 239 }); 240 //创建文本上传域 241 var exteditor = new Ext.form.HtmlEditor({ 242 fieldLabel: '其他信息', 243 width: 745, 244 height: 320 245 }); 246 //表单 247 var form = new Ext.form.FormPanel({ 248 frame: true, 249 title: '员工信息表', 250 style: 'margin:10px', 251 labelWidth: 70, 252 buttonAlign: 'center', 253 items: [{ 254 layout: 'column', 255 items: [ 256 column1, 257 column2, 258 column3, 259 column4 260 ] 261 }, checksource, 262 exteditor 263 ], 264 buttons: [{ 265 text: '保存', 266 handler: function () { alert('保存方法!') } 267 }, { 268 text: '重置', 269 handler: function () { alert('重置方法!') } 270 }] 271 }); 272 //窗体 273 var win = new Ext.Window({ 274 title: '窗口', 275 width: 900, 276 height: 580, 277 resizable: true, 278 modal: true, 279 closable: true, 280 maximizable: true, 281 minimizable: true, 282 buttonAlign: 'center', 283 items: form 284 }); 285 win.show(); 286 287 }); 288 </script> 289 </head> 290 <body> 291 <!-- 292 说明: 293 (1)254行layout: 'column':以列的方式布局,这里总共分了4列,布局的内容下个教程讲解。 294 --> 295 </body> 296 </html>
2.效果如下: