深入浅出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字符串;

 

posted @ 2015-01-21 19:04  翌子涵  阅读(1542)  评论(0编辑  收藏  举报