深入浅出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');
1 4.2 FormPanel和BasicForm详解 2 FormPanel是Ext.Panel的一个子类;实际上,表单的功能是在Ext.form.BasicForm中实现的;在获得Ext.form.FormPanel之后,随时都可以用getForm()方法获得BasicForm对象;可以在获得的BasicForm上执行"提交"和"重置"等操作; 3 可以把Ext.form.FormPanel放到Ext.Viewport中作为整个页面布局的一个部分,同时用items指定Ext.form.FormPanel内部的子组件;可以通过xtype来指定每个子组件的类型;
1 4.3 Ext支持的输入组件 2 4.3.1 控件继承图 3 >.Ext.from.Field 4 >1.Ext.form.Checkbox //复选框 5 Ext.form.Radio //单选框 6 >2.Ext.form.Hidden //隐藏域 7 >3.Ext.form.TextField //文本输入 8 >1.Ext.form.NumberField //数字输入控件 9 >2.Ext.form.TextArea //多行文本输入 10 >3.Ext.form.TriggerField //选择控件 11 >1.Ext.form.ComboBox //下拉控件 12 Ext.form.TimeField //时间选取控件 13 >2.Ext.form.DateField //日期控件 14 >4.Ext.HtmlEditor //编辑器控件 15 16 4.3.2 表单控件 17 Ext.onReady(function(){ 18 Ext.QuickTips.init(); //控件初始化; 20 21 var form = new Ext.form.FormPanel({ //实例化对象 22 buttonAlign:'center', //按钮居中; 23 width:600, 24 title:'form', 25 frame:true, //为组件提供圆角边框; 26 fieldDefaults:{ //对象内部的属性都会被应用到下面的实例中(注意优先级问题); 27 labelAlign:'right', //右浮动; 28 labelWidth:70 //宽度; 29 }, 30 items:[{ //单个组件或者是组件集合; 31 xtype:'container', 32 layout:'column', //布局为列; 33 items:[{ 34 columnWidth:.7, 35 xtype:'fieldset', 36 checkboxToggle:true, //控件组 组头;用复选框来设置控件的展开和收缩; 37 title:'单纯输入', //fieldset的legend; 38 autoHeight:true, 39 defaults:{width:300}, //应用所有的子组件的宽度; 40 defaultType:'textfield', 41 items:[{ //单个组件 42 fieldLabel:'文本', //域标签;文本域; 43 name:'text' 44 },{ 45 xtype:'numberfield', 46 fieldLabel:'数字', 47 name:'number' 48 },{ 49 xtype:'combo', 50 fieldLabel:'选择', 51 name:'combo', 52 store:new Ext.data.SimpleStore({ 53 fields:['value','text'], //将模型的字段绑定到轴; 54 data:[ 55 ['value1','text1'], 56 ['value2','text2'] 57 ] 58 }), 59 displayField:'text', // 60 valueField:'value', //相关的数据值绑定到ComboBox; 61 mode:'local', //? 62 emptyText:'请选择' 63 },{ 64 xtype:'datefield', //带有日期选择器下拉框并会自动进行日期验证的日期输入表单项; 65 feildLabel:'日期', 66 name:'date' 67 },{ 68 xtype:'timefield', //带有时间下拉框和自动时间验证的input表单项; 69 fieldLabel:'时间', 70 name:'tiem' 71 },{ 72 xtype:'textarea', 73 fieldLabel:'多行', 74 name:'textarea' 75 },{ 76 xtype:'hidden', 77 name:'hidden' 78 }] 79 },{ 80 xtype:'container', 81 columnWidth:.3, 82 layout:'form', 83 items:[{ 84 xtype:'fieldset', 85 checkboxToggle:true, 86 title:'多选', 87 autoHeight:true, 88 defaultType:'checkbox', 89 hideLabels:true, 90 style:'margin-left:10px;', 91 bodyStyle:'margin-left:20px;', 92 itmes:[{ 93 boxLabel:'穿暖', 94 name:'check', 95 value:'1', 96 checked:true, 97 width:auto 98 },{ 99 boxLabel:'吃饱', 100 name:'check', 101 value:'2', 102 checked:true, 103 width:'auto' 104 }] 105 },{ 106 xtype:'fieldset', 107 checkboxToggle:true, 108 title:'单选', 109 autoHeight:true, 110 defaultType:'radio', 111 hideLabels:true, 112 style:'margin-left:10px;', 113 bodyStyle:'margin-left:20px;', 114 items:[{ 115 boxLabel:'自由', 116 name:'rad', 117 value:'1', 118 checked:true 119 },{ 120 boxLabel:'爱情', 121 name:'rad', 122 value:'2' 123 }] 124 }] 125 }] 126 },{ 127 xtype:'container', 128 layout:'form', 129 items:[{ 130 labelAlign:'top', 131 xtype:'htmleditor', 132 fieldLabel:'在线编辑器', 133 id:'editor', 134 anchor:'98%', 135 height:200 136 }] 137 }], 138 buttons:[{ 139 text:'保存' 140 },{ 141 text:'读取' 142 },{ 143 text:'取消' 144 }] 145 }); 146 147 form.render('form'); 148 }) 149 150 4.3.3 基本输入控件Ext.form.Field 151 Ext.form.Field是所有输入控件的基类;它定义了输入控件通用的属性和功能函数; 152 >1.页面显示样式:clearCls/cls/fieldClass,它们分别用来定义不同状态下输入框采用的样式; 153 >2.控件参数配置:autoCreate/disabled,它们主要用来设置输入控件生成的DOM内容和标签内容; 154 >3.数据有效性校验:invalidText/msgFx,它们用来设置数据校验的方式以及如何显示错误信息; 155 //这些控件默认会监听blur事件,如果校验失败,就会根据msgTarget中的设置显示错误信息;通常会被设置qtip,用QuickTip显示错误信息;其他参数值:title/side/under; 156 var field1 = new Ext.form.Field({ 157 fieldLabel:'qtip', 158 msgTarget:'qtip' 159 }); 160 field1.markInvalid(); 161 //markInvalid()函数用来显示field校验出错样式; 162 163 4.3.4 文本输入控件TextField 164 //专门用来输入文本数据的输入控件; 165 var text = new Ext.form.TextField({ 166 fieldLabel:'单行', //<label>标签内容; 167 allowBlank:false, //非空检测; 168 emptyText:'空', //输入框默认显示信息; 169 maxLength:50, //最大值; 170 minLength:10 //最小值; 171 }); 172 173 //表单控件最后都是放入表单中,然后渲染到div标签中; 174 var from = new Ext.form.FormPanel({ 175 title:'form', 176 frame:true, 177 items:[text], 178 renderTo:'form' 179 }); 180 181 4.3.5 多行文本输入控件TextArea 182 var area = new Ext.form.TextArea({ 183 width:200, //宽度; 184 grow:true, //根据输入内容修改自身高度; 185 preventScrollbars:true, //禁止滚动条,内容超出范围,自动隐藏; 186 fieldLabel:'多行', 187 ... 188 }) 189 190 4.3.6 日期输入控件DateField 191 var date = new Ext.form.DateField({ 192 fieldLabel:'日期', 193 emptyText:'请选择', 194 format:'Y-m-d', //如何保存并显示选中的日期; 195 disabledDays:[0,6] //禁止选择一周内的第一天和第七天; 196 }) 197 198 4.3.7 时间输入控件TimeField 199 var time = new Ext.form.TimeField({ 200 fieldLabel:'时间', 201 empty:'请选择', 202 minValue:'10:00 AM', //设置起始时间; 203 maxValue:'14:00 PM', 204 increment:30 //设置时间间隔; 205 }); 206 207 4.3.8 在线编辑器HtmlEditor 208 var html = new Ext.form.HtmlEditor({ 209 fieldLabel:'在线编辑器', 210 enableAlignments:true, 211 enableColors:true, 212 ... 213 }) 214 //应用对应的enable选项启用或禁用对应的功能按钮; 215 216 4.3.9 隐藏域Hidden 217 var hidden = new Ext.form.Hidden({ 218 name:'hidden' 219 }); 220 hidden.setValue('some thing'); //对隐藏域赋值; 221 var value = hidden.getValue(); //取值; 222 223 4.3.10 如何使用input type="image" 224 //Ext没有提供对应的控件,我们可以根据需要使用inputType对Ext.form.TextField进行修改; 225 var image = new Ext.form.TextField({ 226 fieldLabel:'证件照片', 227 name:'smallimg', 228 inputType:'image', 229 inputAttrTpl:['src="../img/img1.png"'], 230 width:140, 231 height:120 232 }); 233 //autoCreate使用的是DomHelper的语法,生成一个带有src的DOM;
1 4.4 ComboBox详解 2 //Ext中提供的ComboBox与HTML中原生的select无任何关系,它是用div重写的; 3 4 4.4.1 ComboBox简介 5 var data = [ //二维数组,ComboBox将要显示的数据; 6 ['value1','text1'], 7 ['value2','text2'] 8 ]; 9 10 var store = new Ext.data.ArrayStore({ //将二维数组转成对象; 11 fields:['value','text'], 12 data:data 13 }); 14 store.load(); 15 16 var combo = new Ext.form.ComboBox({ 17 store:stroe, //传入数据; 18 empty:'请选择', 19 mode:'local', //设置:数据已经读取到本地了; 20 valueField:'value', //读取store里的value(对应的在data里的value); 21 dispalyField:'text', //读取store里的text(实际是data里的text); 22 triggerAction:'query', //自动补全; 23 value:'value1', //设置combo的value值; 24 renderTo:'combo' //渲染到的必须是<imput id="combo" type="text" /> 25 }) 26 27 4.4.2 将Select转换成ComboBox 28 <select id="combo"> 29 <option value='value1'>text1</option> 30 ... 31 </select> 32 33 var combo = new Ext.form.ComboBox({ 34 emptyText:'请选择', 35 mode:'local', 36 triggerAction:'all', 37 transform:'combo' //把id="combo"的select的数据抽离出来;添加到ComboBox里; 38 }); 39 40 4.4.3 ComboBox结构详解 41 var combo = new Ext.form.ComboBox({ 42 ... 43 hiddenName:'comboId' //让ComboBox又增加了一个type="hidden"的input,并且它的name和id都是"comboId" 44 }); 45 //若没有设置hiddenName,ComboBox提交的都是用户看到的text值;设置之后,才可以向后台提交text对应的value值; 46 47 4.4.4 ComboBox读取远程数据 48 var store = new Ext.data.Store({ 49 proxy:{ 50 type:'ajax', 51 url:'xxx.txt', 52 reader:{ 53 type:'array' 54 }, 55 fields:[ 56 {name:'value'},{name:'text'} 57 ] 58 } 59 }); 60 61 var combo = new Ext.form.ComboBox({ 62 .. 63 mode:'remote', //读取远程数据; 64 }); 65 66 4.4.5 ComboBox高级设置 67 >1.添加分页功能 68 var combo = new Ext.form.ComboBox({ 69 .. 70 mode:'remote', //参数必须是remote;因为分页的前提是先到store中分批获取数据; 71 minListWidth:200, //下拉列表的宽度; 72 pageSize:5 //每次显示多少条记录; 73 }); 74 75 >2.是否允许用户自己填写内容 76 //ComboBox的显示框是一个type="text"输入框,所以默认可以输入数据的; 77 var combo = new Ext.form.ComboBox({ 78 ... 79 editable:false //禁止用户填写数据; 80 }); 81 82 4.4.6 监听用户选择的数据 83 //设置事件机制监听ComboBox的事件,从而获知用户选择了哪条数据; 84 combo.on('select',function(comboBox){ 85 alert(comboBox.getValue()+'-'+comboBox.getRawValue()); 86 //getValue():返回对象的value值(value); 87 //getRawValue():返回表单项的原始值(text); 88 }); 89 //on():要监听绑定的combo对象; 90 //select:要监听的事件;\ 91 //comboBox:是被监听的combo对象本身; 92 93 4.4.7 使用本地数据实现省/市/县级联 94 comboProvince.on('select',function(comboBox){ 95 var province = comboBox.getValue(); 96 if(province == '河北'){ 97 storeCity.proxy.data = dataCityHebei; //动态设置市; 98 }else if (province == '内蒙古'){ 99 storeCity.proxy.data = dataCityNeimenggu; 100 } 101 }); 102 comboCity.on('select',function(comboBox){ 103 var city = comboBox.getValue(); //动态设置区; 104 if(city == "唐山"){ 105 storeCounty.proxy.data = dataCountyTangshan; 106 }else{ 107 storeCounty.proxy.data = dataCountyUnknow; 108 } 109 }); 110 comboCounty.on('select',function(comboBox){ 111 alert(comboProvince.getValue()+'-'+comboCity.getValue()+'-'+comboCounty.getValue()); 112 });
1 4.5 复选框和单选框 2 4.5.1 复选框 3 var form = new Ext.form.FormPanel({ 4 title:'form', 5 buttonAlign:'center', 6 frame:true, //提供圆角; 7 url:'xxx.jsp', 8 9 //Ext.form.Checkbox 10 items:[{ //在表单中添加控件容器; 11 xtype:'fieldset', //控件组,包装一组输入域的容器;渲染为HTML的fieldset; 12 title:'多选', //渲染为fieldset的legend; 13 autoHeigth:true, 14 defaultType:'checkbox', 15 hideLabels:true, 16 items:[ //在控件容器中添加复选框控件; 17 {boxLabel:'多选一',inputValue:'1',checked:true}, //默认选中; 18 {boxLabel:'多选二',inputValue:'2'}, 19 {boxLabel:'多选三',inputValue:'3'}, 20 ] 21 }], 22 23 buttons:[{ 24 text:'提交', 25 handler:function(){ 26 form.getForm.submit(); 27 } 28 }] 29 }); 30 form.render('form'); 31 32 4.5.2 单选按钮 33 //单选按钮是继承自复选框的,所以Checkbox中的所有功能都能在Radio中使用; 34 items:[{ 35 xtype:'fieldset', 36 title:'单选', 37 defaultType:'radio', //findField('radio')对应的field; 38 hideLabels:true, 39 items:[ 40 {boxLabel:'单选一',name:'radio',inputValue:'1',checked:true}, 41 {boxLabel:'单选二',name:'radio',inputValue:'2'} 42 //具有相同name值的Radio控件会放在同一组;这样保证单选功能; 43 ] 44 }], 45 buttons:[{ 46 text:'提交', 47 handler:.. 48 },{ 49 text:'getGroupValue', //添加一个按钮; 50 handler:function(){ //触发器; 51 Ext.Msg.alert('信息',form.getForm().findField('radio').getGroupValue()); 52 //信息弹出框;获取radio的inputValue值; 53 } 54 }] 55 56 4.5.3 CheckboxGroup和RadioGroup控件 57 //为复选框和单选按钮控件实现各种复杂的排列方式; 58 >1.横向排列 59 { 60 xtype:'checkboxgroup', //默认横排; 61 fieldLabel:'自动布局', 62 ... 63 } 64 >2.竖向排列 65 { 66 xtype:'checkboxgroup', 67 fieldLabel:'单列', 68 columns:1, //显示为一竖列; 69 ... 70 } 71 >3.多列排列 72 { 73 xtype:'checkboxgroup', 74 columns:3, //显示为三竖列; 75 vertical:true, //垂直优先; 76 itemsCls:'x-check-group-alt', //向组件添加Class; 77 ... 78 }
1 4.6 滑动条表单控件 2 //可以将滑动条作为一个表单空间爱你放在表单面板中进行布局,实现表单数据的修改/读取与提交功能; 3 >1.滑动条 4 var huadong = new Ext.form.FormPanel({ 5 widrth:400, 6 title:'滑动条控件', 7 bodyStyle:'padding:10px;', 8 renderTo:'container', 9 defaultType:'sliderfield', 10 11 defaults:{ 12 anchor:'95%', 13 tipText:function(thumb){ 14 return String(thumb.value)+'%'; 15 } 16 }, 17 items:[{ 18 fieldLabel:'Sound Effects', 19 value:50, 20 name:'fx' 21 },{ 22 fieldLabel:'Ambient Sounds', 23 value:80, 24 name:'ambient' 25 }] 26 }); 27 28 >2.多滑块滑动条 29 var horizontal = new Ext.Slider({ 30 renderTo:'multi-slider-horizontal', 31 width:214, 32 minValue:0, 33 maxValue:100, 34 values:[10,50,90], 35 plugins:new Ext.slider.Tip(); 36 })
1 4.7 表单布局 2 4.7.1 默认平铺布局 3 var form = new Ext.form.FormPanel({ 4 defaultType:'textfiled', 5 frame:true, 6 fieldDefaults:{ 7 labelWidth:60 8 }, 9 items:[{fieldLabel:'默认布局'}], 10 }); 11 12 4.7.2 平分列布局 13 //使用"layout:'column'"来说明下面要使用的是列布局;然后在items指定每列中使用'columnWidth'设置每列所占总宽度的百分比; 14 //须手动指定使用layout:'form',这样才能在每列中正常显示输入框和对应标签; 15 var from = new Ext.form.FormPanel({ 16 .. 17 items:[{ 18 layout:'column', //列布局; 19 items:[{ 20 columnWidth:0.4, //本列占总宽度的百分比; 21 layout:'form', //组件内部默认布局; 22 defaultType:'textfield',//以下组件为文本输入控件; 23 items:[ 24 {fieldLabel:'平分列1'}, 25 {fieldLabel:'平分列2'}, 26 ] 27 }] 28 }] 29 }); 30 31 4.7.3 在布局中使用fielset 32 //在标准HTML中,需把输入项都放到fieldset中,以此来显示分组结构; 33 items:[ 34 xtype:'feildset', //使用fieldset; 35 title:'使用fieldset', //fieldset的legend; 36 columnWidth:0.5, 37 lsyout:'form', 38 autoHeight:true, 39 defaultType:'textfield',//定义以下组件xtype; 40 items:[{fieldLabel:'汉字'}] 41 ] 42 43 4.7.4 在fieldset中使用布局 44 //创建FieldSet对象,包含分列布局,再传入到FormPanel中; 45 46 4.7.5 自定义布局 47 //因为Ext.form.FormPanel继承自Ext.Panel,所以可以使用layout和items提供各种内部布局形式; 48 //除了Ext.form.Field之类的输入控件外,还可以使用其他Panel来装饰表单; 49 //使用xtype:'panel',在它里边使用img来显示图片; 50 { 51 .. 52 items:[ 53 {fieldLabel:'文字',xtype:'textfield'}, 54 {xtype:'panel',html:'<div><img src='user.png' /></div>'} 55 ] 56 }
1 4.8 数据校验 2 //在Firefox下校验失败,调用submit()也不会提交; 3 //在IE下必须先使用form.isValid()自行判断,如果返回false,就不能在调用submit(),否则仍然会将非法数据提交到后台; 4 Ext.QuickTips.init(); //提示功能所需函数; 5 new Ext.form.TextField({ 6 name:'text', 7 fieldLabel:'不为空', 8 allowBlank:false //输入框不能为空; 9 }); 10 11 4.8.2 最大长度和最小长度 12 new Ext.form.TextField({ 13 fieldLabel:'字符长度', 14 name:'text', 15 minLength:5, 16 maxLength:10 17 }); 18 19 4.8.3 借助vtype 20 //为vtype设置属性,即可校验; 21 new Ext.form.TextField({ 22 fieldLabel:'vtype校验', 23 name:'text', 24 vtype:'email/url/alpha/alphanum' 25 //验证邮箱/网址/英文字符/英文字符和数字; 26 }); 27 28 4.8.4 自定义校验规则 29 //允许自定义一个regex对输入数据进行校验; 30 new Ext.form.TextField({ 31 fieldLabel:'自定义校验', 32 regex:/^[\u4E00-\u9FA5]+$/, 33 regexText:'只能输入汉字' 34 }); 35 36 4.8.5 NumberField校验 37 //NumberField控件不允许用户输入不符合要求的数据; 38 items:[{ 39 fieldLabel:'数字', 40 xtype:'numberfield', //数字控件; 41 allowNegative:false, //不允许负值; 42 allowDecimals:false, //不允许小数; 43 decimalPrecision:4, //精确到小数点后几位; 44 minValue:0, 45 maxValue:150, 46 maskRe:/\d/ //阻止小数和符号的输入; 47 }] 48 49 4.8.6 使用后台返回的校验信息 50 //在服务器返回的相应中可以包含校验失败的信息; 51 items:[{ 52 fieldLabel:'输入框1', 53 name:'text1' 54 },{ 55 fieldLabel:'输入框2', 56 name:'text2' 57 }], 58 buttons:[{ 59 text:'按钮', 60 handler:function(){ 61 form.getForm().submit({ 62 success:function(form,action){ 63 Ext.Msg.alert('信息',action.result.msg); 64 }, 65 failure:function(form,action){ 66 if(action.failureType == Ext.form.Action.SERVER_INVALID){ 67 Ext.Msg.alert('错误','后台校验失败'); 68 }else{ 69 Ext.Msg.alert('错误','无法访问后台'); 70 } 71 } 72 }); 73 } 74 }] 75 //通过actioin的failureType来判断响应失败是因为校验失败还是因为HTTP链接发生错误; 76 >.后台响应信息 77 {success:false,errors:{text1:'有问题1',text2:'有问题2'}} 78 //errors对应一个JSON对象,里边包含的就是错误信息;与输入框的text1和text2对应起来,最终显示在页面上;
1 4.9 使用表单提交数据 2 >.一种原始的HTML表单形式的提交和两种Ajax形式的提交; 3 4.9.1 Ext默认的提交形式 4 Ext.onReady(function(){ 5 var form = new Ext.form.FormPanel({ 6 defaultType:'textfield', 7 title:'表单提交', 8 ... 9 url:'xxx.jsp', //提交路径; 10 items:[{ 11 fieldLabel:'文本框', 12 name:'text' //后台判断来自哪个控件; 13 }], 14 buttons:[{ 15 text:'提交', //按钮显示文字; 16 handler:function(){ //提交按钮调用函数; 17 form.getForm.submit({ //为submit封装回调函数; 18 //只有后台响应为true,或响应的JSON中包含success:true时,执行; 19 success:function(form,action){ 20 //参数直接调用form对象; 21 //action可直接从返回信息中调用JSON数据 ↓↓ 22 Ext.Msg.alert('信息',action.result.msg); 23 }, 24 failure:function(){ 25 //Ext规定:如果响应的JSON中的success不是true,并且JSON中包含errors:{},则是判断后的业务错误; 26 //如果没有包含errors:{},则是链接失败; 27 Ext.Msg.alert('错误','操作失败!'); 28 } 29 }) 30 } 31 }] 32 }); 33 form.render('form'); 34 }); 35 36 4.9.2 使用HTML原始的提交形式 37 //Ext默认的提交形式是不会进行页面跳转的;主要是"one page one application"的形式; 38 //在Ext.form.FormPanel里找到form,在它上面调用submit()就可以了; 39 //Ext动态生成了表单,却没有把action部分添加上; 40 //所以需要修改按钮的handler函数↓↓↓ 41 handler:function(){ 42 form.getForm().getEl().dom.action = 'xxx.jsp'; 43 //Ext中所有的控件都有el,el都是有DOM的;这个DOM模型就是Ext控件在页面上真实对应的部分了; 44 form.getForm().getEl().dom.submit(); 45 //应用了HTML原始的提交形式; 46 } 47 48 4.9.3 单纯Ajax 49 //若使用外部Ajax,需要从中把字段的数据取出来; 50 >.form.getValues():若参数是true,就返回JSON组装的字符串;若参数是false,就返回JSON对象; 51 >.findField():获取表单里的控件; 52 var text = form.getForm().findField('text'); 53 //用getValues(true)函数来配合Ajax获得数据;然后用Ajax传递给后台;最后判断回调; 54 handler:function(){ 55 var text = form.getForm().findField('text'); 56 57 Ext.Ajax.request({ 58 method:'POST', 59 url:'xxx.jsp', 60 success:function(response){ 61 var result = Ext.decode(response.responseText); 62 Ext.Msg.alert('信息',result.msg); 63 }, 64 failure:function(){}, 65 params:form.getForm().getValues(true) 66 }) 67 } 68 69 4.9.4 文件上传 70 //为Ext.form.Field设置inputType:'file'即可; 71 var file = new Ext.form.FormPanel({ 72 ... 73 title:'文件上传', 74 fileUpload:true, 75 items:[{ 76 xtype:'textfield', 77 fieldLabel:'上传', 78 name:'file', 79 inputType:'file' 80 }] 81 }) 82 83 4.9.5 文件上传控件 84 //FileUploadField更加美化了上传选择控件; 85 var fileUpload = new Ext.form.FormPanel({ 86 .. 87 title:'File Upload Field', 88 fileUpload:true, 89 items:[{ 90 xtype:'fileuploadfield', 91 fieldLabel:'上传控件', 92 name:'fielduploadfield' 93 }] 94 });
1 4.10 自动把数据填充到表单中 2 //使用Ext.data.JsonReader来负责数据的读取和转换操作; 3 [{text:'textField',number:12.34,dat:'2015-01-01',combo:1}] 4 //↑↑这里提供了JSON数据,表单中需要配置对应的reader↓↓; 5 var reader = new Ext.data.JsonReader({},[ 6 {name:'text',type:'string'}, 7 {name:'number',type:'float'}, 8 {name:'date',type:'date',dateFormat:'Y-m-d'}, 9 {name:'combo',type:'int'} 10 ]); 11 //现在将设置好的reader放到表单中,后台返回的JSON会在这里被JsonReader()转换成对应的数据类型,供表单使用; 12 var form = new Ext.form.FormPanel({ 13 .. 14 reader:reader, 15 items:[{ 16 xtype:'textfield', 17 fieldLabel:'文本', 18 name:'text' 19 },{ 20 xtype:'numberfield', 21 fieldLabel:'数字', 22 name:'number' 23 },{ 24 xtype:'datefield', 25 fieldLabel:'日期', 26 name:'date' 27 },{ 28 xtype:'combo', 29 fieldLabel:'下拉', 30 name:'combo', 31 store:new Ext.data.SimpleStore({ 32 fields:['value','text'], 33 data:[[1,'text1'],[2,'text2'],[3,'text3']] 34 }), 35 triggerAction:'all', 36 valueField:'value', 37 displayField:'text' 38 }] 39 }) 40 //当调用form.load()函数时,表单会使用Ajax去后台读取需要的数据; 41 { 42 text:'读取', 43 handler:function(){ 44 form.getFomr().load({url:'xx2.txt'}); 45 } 46 } 47 //为load()传递一个url参数,指定读取数据的网址;这个网址返回的信息就是上面提到的用于向表单填充数据的JSON字符串;