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字符串;