深入浅出ExtJS 第四章 表单与输入控件(未完)
1 4.1 制作表单 2 var form = new Ext.form.FormPanel({ 3 title:‘form‘, 4 defaultType:‘textfield‘, 5 buttonAlign:‘center‘, 6 frame:true, 7 width:220, 8 fieldDefaults:{ 9 labelAlign:‘right‘, 10 labelWidth:70 11 }, 12 tiems:[{ //子组件; 13 fieldLabel:‘文本框‘ //文本框组件; 14 }], 15 buttons:[{ 16 text:‘按钮‘ 17 }] 18 }); 19 form.render(‘form‘); 20 21 4.2 FormPanel和BasicForm详解 22 FormPanel是Ext.Panel的一个子类;实际上,表单的功能是在Ext.form.BasicForm中实现的;在获得Ext.form.FormPanel之后,随时都可以用getForm()方法获得BasicForm对象;可以在获得的BasicForm上执行"提交"和"重置"等操作; 23 可以把Ext.form.FormPanel放到Ext.Viewport中作为整个页面布局的一个部分,同时用items指定Ext.form.FormPanel内部的子组件;可以通过xtype来指定每个子组件的类型; 24 25 4.3 Ext支持的输入组件 26 4.3.1 控件继承图 27 >.Ext.from.Field 28 >1.Ext.form.Checkbox //复选框 29 Ext.form.Radio //单选框 30 >2.Ext.form.Hidden //隐藏域 31 >3.Ext.form.TextField //文本输入 32 >1.Ext.form.NumberField //数字输入控件 33 >2.Ext.form.TextArea //多行文本输入 34 >3.Ext.form.TriggerField //选择控件 35 >1.Ext.form.ComboBox //下拉控件 36 Ext.form.TimeField //时间选取控件 37 >2.Ext.form.DateField //日期控件 38 >4.Ext.HtmlEditor //编辑器控件 39 40 4.3.2 表单控件 41 Ext.onReady(function(){ 42 Ext.QuickTips.init(); 43 //HtmlEditor需要 44 45 var form = new Ext.form.FormPanel({ //实例化对象 46 buttonAlign:‘center‘, //按钮居中; 47 width:600, 48 title:‘form‘, 49 frame:true, //为组件提供圆角边框; 50 fieldDefaults:{ //对象内部的属性都会被应用到下面的实例中(注意优先级问题); 51 labelAlign:‘right‘, //右浮动; 52 labelWidth:70 //宽度; 53 }, 54 items:[{ //单个组件或者是组件集合; 55 xtype:‘container‘, 56 layout:‘column‘, //布局为列; 57 items:[{ 58 columnWidth:.7, 59 xtype:‘fieldset‘, 60 checkboxToggle:true, //控件组 组头;用复选框来设置控件的展开和收缩; 61 title:‘单纯输入‘, //fieldset的legend; 62 autoHeight:true, 63 defaults:{width:300}, //应用所有的子组件的宽度; 64 defaultType:‘textfield‘, 65 items:[{ //单个组件 66 fieldLabel:‘文本‘, //域标签;文本域; 67 name:‘text‘ 68 },{ 69 xtype:‘numberfield‘, 70 fieldLabel:‘数字‘, 71 name:‘number‘ 72 },{ 73 xtype:‘combo‘, 74 fieldLabel:‘选择‘, 75 name:‘combo‘, 76 store:new Ext.data.SimpleStore({ 77 fields:[‘value‘,‘text‘], //将模型的字段绑定到轴; 78 data:[ 79 [‘value1‘,‘text1‘], 80 [‘value2‘,‘text2‘] 81 ] 82 }), 83 displayField:‘text‘, // 84 valueField:‘value‘, //相关的数据值绑定到ComboBox; 85 mode:‘local‘, //? 86 emptyText:‘请选择‘ 87 },{ 88 xtype:‘datefield‘, //带有日期选择器下拉框并会自动进行日期验证的日期输入表单项; 89 feildLabel:‘日期‘, 90 name:‘date‘ 91 },{ 92 xtype:‘timefield‘, //带有时间下拉框和自动时间验证的input表单项; 93 fieldLabel:‘时间‘, 94 name:‘tiem‘ 95 },{ 96 xtype:‘textarea‘, 97 fieldLabel:‘多行‘, 98 name:‘textarea‘ 99 },{ 100 xtype:‘hidden‘, 101 name:‘hidden‘ 102 }] 103 },{ 104 xtype:‘container‘, 105 columnWidth:.3, 106 layout:‘form‘, 107 items:[{ 108 xtype:‘fieldset‘, 109 checkboxToggle:true, 110 title:‘多选‘, 111 autoHeight:true, 112 defaultType:‘checkbox‘, 113 hideLabels:true, 114 style:‘margin-left:10px;‘, 115 bodyStyle:‘margin-left:20px;‘, 116 itmes:[{ 117 boxLabel:‘穿暖‘, 118 name:‘check‘, 119 value:‘1‘, 120 checked:true, 121 width:auto 122 },{ 123 boxLabel:‘吃饱‘, 124 name:‘check‘, 125 value:‘2‘, 126 checked:true, 127 width:‘auto‘ 128 }] 129 },{ 130 xtype:‘fieldset‘, 131 checkboxToggle:true, 132 title:‘单选‘, 133 autoHeight:true, 134 defaultType:‘radio‘, 135 hideLabels:true, 136 style:‘margin-left:10px;‘, 137 bodyStyle:‘margin-left:20px;‘, 138 items:[{ 139 boxLabel:‘自由‘, 140 name:‘rad‘, 141 value:‘1‘, 142 checked:true 143 },{ 144 boxLabel:‘爱情‘, 145 name:‘rad‘, 146 value:‘2‘ 147 }] 148 }] 149 }] 150 },{ 151 xtype:‘container‘, 152 layout:‘form‘, 153 items:[{ 154 labelAlign:‘top‘, 155 xtype:‘htmleditor‘, 156 fieldLabel:‘在线编辑器‘, 157 id:‘editor‘, 158 anchor:‘98%‘, 159 height:200 160 }] 161 }], 162 buttons:[{ 163 text:‘保存‘ 164 },{ 165 text:‘读取‘ 166 },{ 167 text:‘取消‘ 168 }] 169 }); 170 171 form.render(‘form‘); 172 }) 173 174 4.3.3 基本输入控件Ext.form.Field 175 Ext.form.Field是所有输入控件的基类;它定义了输入控件通用的属性和功能函数; 176 >1.页面显示样式:clearCls/cls/fieldClass,它们分别用来定义不同状态下输入框采用的样式; 177 >2.控件参数配置:autoCreate/disabled,它们主要用来设置输入控件生成的DOM内容和标签内容; 178 >3.数据有效性校验:invalidText/msgFx,它们用来设置数据校验的方式以及如何显示错误信息; 179 //这些控件默认会监听blur事件,如果校验失败,就会根据msgTarget中的设置显示错误信息;通常会被设置qtip,用QuickTip显示错误信息;其他参数值:title/side/under; 180 var field1 = new Ext.form.Field({ 181 fieldLabel:‘qtip‘, 182 msgTarget:‘qtip‘ 183 }); 184 field1.markInvalid(); 185 //markInvalid()函数用来显示field校验出错样式; 186 187 4.3.4 文本输入控件TextField 188 //专门用来输入文本数据的输入控件; 189 var text = new Ext.form.TextField({ 190 fieldLabel:‘单行‘, //<label>标签内容; 191 allowBlank:false, //非空检测; 192 emptyText:‘空‘, //输入框默认显示信息; 193 maxLength:50, //最大值; 194 minLength:10 //最小值; 195 }); 196 197 //表单控件最后都是放入表单中,然后渲染到div标签中; 198 var from = new Ext.form.FormPanel({ 199 title:‘form‘, 200 frame:true, 201 items:[text], 202 renderTo:‘form‘ 203 }); 204 205 4.3.5 多行文本输入控件TextArea 206 var area = new Ext.form.TextArea({ 207 width:200, //宽度; 208 grow:true, //根据输入内容修改自身高度; 209 preventScrollbars:true, //禁止滚动条,内容超出范围,自动隐藏; 210 fieldLabel:‘多行‘, 211 ... 212 }) 213 214 4.3.6 日期输入控件DateField 215 var date = new Ext.form.DateField({ 216 fieldLabel:‘日期‘, 217 emptyText:‘请选择‘, 218 format:‘Y-m-d‘, //如何保存并显示选中的日期; 219 disabledDays:[0,6] //禁止选择一周内的第一天和第七天; 220 }) 221 222 4.3.7 时间输入控件TimeField 223 var time = new Ext.form.TimeField({ 224 fieldLabel:‘时间‘, 225 empty:‘请选择‘, 226 minValue:‘10:00 AM‘, //设置起始时间; 227 maxValue:‘14:00 PM‘, 228 increment:30 //设置时间间隔; 229 }); 230 231 4.3.8 在线编辑器HtmlEditor 232 var html = new Ext.form.HtmlEditor({ 233 fieldLabel:‘在线编辑器‘, 234 enableAlignments:true, 235 enableColors:true, 236 ... 237 }) 238 //应用对应的enable选项启用或禁用对应的功能按钮; 239 240 4.3.9 隐藏域Hidden 241 var hidden = new Ext.form.Hidden({ 242 name:‘hidden‘ 243 }); 244 hidden.setValue(‘some thing‘); //对隐藏域赋值; 245 var value = hidden.getValue(); //取值; 246 247 4.3.10 如何使用input type="image" 248 //Ext没有提供对应的控件,我们可以根据需要使用inputType对Ext.form.TextField进行修改; 249 var image = new Ext.form.TextField({ 250 fieldLabel:‘证件照片‘, 251 name:‘smallimg‘, 252 inputType:‘image‘, 253 inputAttrTpl:[‘src="../img/img1.png"‘], 254 width:140, 255 height:120 256 }); 257 //autoCreate使用的是DomHelper的语法,生成一个带有src的DOM; 258 259 4.4 ComboBox详解 260 //Ext中提供的ComboBox与HTML中原生的select无任何关系,它是用div重写的; 261 262 4.4.1 ComboBox简介 263 var data = [ //二维数组,ComboBox将要显示的数据; 264 [‘value1‘,‘text1‘], 265 [‘value2‘,‘text2‘] 266 ]; 267 268 var store = new Ext.data.ArrayStore({ //将二维数组转成对象; 269 fields:[‘value‘,‘text‘], 270 data:data 271 }); 272 store.load(); 273 274 var combo = new Ext.form.ComboBox({ 275 store:stroe, //传入数据; 276 empty:‘请选择‘, 277 mode:‘local‘, //设置:数据已经读取到本地了; 278 valueField:‘value‘, //读取store里的value(对应的在data里的value); 279 dispalyField:‘text‘, //读取store里的text(实际是data里的text); 280 triggerAction:‘query‘, //自动补全; 281 value:‘value1‘, //设置combo的value值; 282 renderTo:‘combo‘ //渲染到的必须是<imput id="combo" type="text" /> 283 }) 284 285 4.4.2 将Select转换成ComboBox 286 <select id="combo"> 287 <option value=‘value1‘>text1</option> 288 ... 289 </select> 290 291 var combo = new Ext.form.ComboBox({ 292 emptyText:‘请选择‘, 293 mode:‘local‘, 294 triggerAction:‘all‘, 295 transform:‘combo‘ //把id="combo"的select的数据抽离出来;添加到ComboBox里; 296 }); 297 298 4.4.3 ComboBox结构详解 299 var combo = new Ext.form.ComboBox({ 300 ... 301 hiddenName:‘comboId‘ //让ComboBox又增加了一个type="hidden"的input,并且它的name和id都是"comboId" 302 }); 303 //若没有设置hiddenName,ComboBox提交的都是用户看到的text值;设置之后,才可以向后台提交text对应的value值; 304 305 4.4.4 ComboBox读取远程数据 306 var store = new Ext.data.Store({ 307 proxy:{ 308 type:‘ajax‘, 309 url:‘xxx.txt‘, 310 reader:{ 311 type:‘array‘ 312 }, 313 fields:[ 314 {name:‘value‘},{name:‘text‘} 315 ] 316 } 317 }); 318 319 var combo = new Ext.form.ComboBox({ 320 .. 321 mode:‘remote‘, //读取远程数据; 322 }); 323 324 4.4.5 ComboBox高级设置 325 >1.添加分页功能 326 var combo = new Ext.form.ComboBox({ 327 .. 328 mode:‘remote‘, //参数必须是remote;因为分页的前提是先到store中分批获取数据; 329 minListWidth:200, //下拉列表的宽度; 330 pageSize:5 //每次显示多少条记录; 331 }); 332 333 >2.是否允许用户自己填写内容 334 //ComboBox的显示框是一个type="text"输入框,所以默认可以输入数据的; 335 var combo = new Ext.form.ComboBox({ 336 ... 337 editable:false //禁止用户填写数据; 338 }); 339 340 4.4.6 监听用户选择的数据 341 //设置事件机制监听ComboBox的事件,从而获知用户选择了哪条数据; 342 combo.on(‘select‘,function(comboBox){ 343 alert(comboBox.getValue()+‘-‘+comboBox.getRawValue()); 344 //getValue():返回对象的value值(value); 345 //getRawValue():返回表单项的原始值(text); 346 }); 347 //on():要监听绑定的combo对象; 348 //select:要监听的事件;\ 349 //comboBox:是被监听的combo对象本身; 350 351 4.4.7 使用本地数据实现省/市/县级联 352 comboProvince.on(‘select‘,function(comboBox){ 353 var province = comboBox.getValue(); 354 if(province == ‘河北‘){ 355 storeCity.proxy.data = dataCityHebei; //动态设置市; 356 }else if (province == ‘内蒙古‘){ 357 storeCity.proxy.data = dataCityNeimenggu; 358 } 359 }); 360 comboCity.on(‘select‘,function(comboBox){ 361 var city = comboBox.getValue(); //动态设置区; 362 if(city == "唐山"){ 363 storeCounty.proxy.data = dataCountyTangshan; 364 }else{ 365 storeCounty.proxy.data = dataCountyUnknow; 366 } 367 }); 368 comboCounty.on(‘select‘,function(comboBox){ 369 alert(comboProvince.getValue()+‘-‘+comboCity.getValue()+‘-‘+comboCounty.getValue()); 370 }); 371 372 4.5 复选框和单选框 373 4.5.1 复选框 374 var form = new Ext.form.FormPanel({ 375 title:‘form‘, 376 buttonAlign:‘center‘, 377 frame:true, //提供圆角; 378 url:‘xxx.jsp‘, 379 380 //Ext.form.Checkbox 381 items:[{ 382 xtype:‘fieldset‘, //控件组,包装一组输入域的容器;渲染为HTML的fieldset; 383 title:‘多选‘, //渲染为fieldset的legend; 384 autoHeigth:true, 385 defaultType:‘checkbox‘, 386 hideLabels:true, 387 items:[ 388 {boxLabel:‘多选一‘,inputValue:‘1‘,checked:true}, 389 {boxLabel:‘多选二‘,inputValue:‘2‘}, 390 {boxLabel:‘多选三‘,inputValue:‘3‘}, 391 ] 392 }], 393 394 buttons:[{ 395 text:‘提交‘, 396 handler:function(){ 397 form.getForm.submit(); 398 } 399 }] 400 }); 401 form.render(‘form‘);
郑重声明:本站内容如果来自互联网及其他传播媒体,其版权均属原媒体及文章作者所有。转载目的在于传递更多信息及用于网络分享,并不代表本站赞同其观点和对其真实性负责,也不构成任何其他建议。