基本输入控件Ext.form.Field
Ext.form.Field是所有表单输入控件的基类,其他的输入控件都是基于它扩展的来的。其定义了输入控件通用的属性和功能函数,这些通用的属性和功能函数大致分为3大类:页面显示样式、控件参数配置和数据有效性校验。
页面显示样式:clearCls, cls, fieldClass, focusClass, itemCls, invalidClass, labelStyle等属性,他们分贝用来定义不同状态下输入框采用的样式。
控件参数配置:autoCreate, disabled, fieldLabel, hideLabel, inputType, labelSeparator, name, readOnly, tabIndex, value等属性。
数据有效性检验:invalidText, msgFx, msgTarget, validateOnBlue, validateDelay, validateEvent等属性。
下列示例展现了空间可以使用的校验显示方式:
1
Ext.QuickTips.init();
2
3
var field1 = new Ext.form.Field(
{
4
fieldLabel:'qtip',
5
msgTarget:'qtip'
6
});
7
var field2 = new Ext.form.Field(
{
8
fieldLabel:'title',
9
msgTarget:'title'
10
});
11
var field3 = new Ext.form.Field(
{
12
fieldLabel:'side',
13
msgTarget:'side'
14
});
15
var field4 = new Ext.form.Field(
{
16
fieldLabel:'under',
17
msgTarget:'under'
18
});
19
20
var form = new Ext.form.FormPanel(
{
21
title:'form',
22
items:[field1,field2,field3,field4],
23
renderTo:'form'
24
});
25
26
field1.markInvalid();
27
field2.markInvalid();
28
field3.markInvalid();
29
field4.markInvalid();
30
下拉输入框Ext.form.TriggerField
Ext.form.TriggerField是ComboBox, DateField和TimeField的父类,它既可以通过手工录入数据,也可以通过选择录入数据。为了显示下拉选择的功能,需要覆写它的onTriggerClick()函数以实现弹出窗口。
1
var triggerField = new Ext.form.TriggerField(
{
2
fieldLabel:'选择',
3
name:'name',
4
onSelect:function(record)
{},
5
onTriggerClick:function()
{
6
if (this.menu == null)
{
7
this.menu = selectMenu; //selectMenu是一个预先创建的一个Ext.menu.Menu实例,实例中可以放按钮,表格等控件。
8
}
9
this.menu.show(this.el,"tl-bl?"); //tl-bl?标示弹出的菜单的左上角或左下角与Ext.form.TriggerField对齐
10
}
11
});
使用表单提交数据
1
Ext.onReady(function()
{
2
var form = new Ext.form.FormPanel(
{
3
defaultType:'textfield',
4
labelAlign:'right',
5
title:'form',
6
labelWidth:50,
7
frame:true,
8
width:220,
9
url:'04_01.jsp',
10
items:[
{
11
fieldLabel:'文本框',
12
name:'text'
13
}],
14
buttons:[
{
15
text:'按钮',
16
handler:function()
{
17
form.getForm().submit(
{
18
success:function(form,action)
{
19
Ext.Msg.alert('信息',action.result.msg);
20
},
21
failure:function()
{
22
Ext.Msg.alert('错误','操作失败!');
23
}
24
});
25
}
26
}]
27
})
28
});
在Ext.lib.Ajax中,判断究竟是调用success还是failure的条件与业务无关。如果Http响应成功,就执行success;如果出现404或500错误,就执行failure。
form中的success和failure则是与业务相关的,只有后台响应为true或响应的JSON中包含success:true时,才执行success()函数。不过,这样一来failure()函数就复杂了,如何判断是连接失败,还是业务上出现问题呢?为了区分它们,EXT默认规定:如果响应的JSON中success不是true,并且响应的JSON中包含errors:{},那么就认为是业务错误;如果不包含errors:{},就认为是连接失败。当业务错误时,用this.failureType=Ext.form.Action.SERVER_INVALID;标记,可以通过action.failureType进行判断。
使用HTML原始的提交形式
1
handler:function()
{
2
form.getForm().getEl().dom.action = '04_01.jsp';
3
form.getForm().getEl().com.submit();
4
}
单纯Ajax
1
Ext.lib.Ajax.request(
2
'POST',
3
'04_01.jsp',
4
{
5
success:function(response)
{
6
var result = Ext.decode(response.responseText);
7
Ext.Msg.alert('信息',result.msg);
8
},
9
failure:function()
{}
10
}
11
)
表单布局----默认的平铺布局
1
items:
{
2
{fieldLabel:'俩字'},
3
{fieldLabel:'三个字'},
4
{fieldLabel:'四个汉字'},
5
}
Form中的标签默认使用左对齐的方式,一共有left, top, right三个值可以选,我们可以通过配置labelAlign : 'right'使得右对齐。标签文字的宽度也可以设置,labelWidth : 60。如果标签过长,文字会自动换行。按钮位置也可以设置,有left, center, right3种选择,默认是right。
表单布局----平行分列布局
先使用layout : 'column'来说明下面要使用的是列布局,然后在items指定的每列中使用columnWidth指定每列所占总宽度的百分比。
如果使用了分列布局,就不能在表单中直接使用defaultType指定默认的xtype了,否则会影响布局结果。每一列中也必须手动指定使用layout : 'form',这样才能在每列中正常显示输入框和对应标签。layout : 'form'其实就是FormPanel默认使用的布局方式,即自上而下一次排列。
1
items:[
{
2
layout:'column',
3
items:[
{
4
columnWidth:.33,
5
layout : 'form',
6
items:[
{xtype:'textfield',fieldLabel:'俩字'}]
7
},
{
8
columnWidth:.33,
9
layout : 'form',
10
items:[
{xtype:'textfield',fieldLabel:'三个字'}]
11
},
{
12
columnWidth:.33,
13
layout : 'form',
14
items:[
{xtype:'textfield',fieldLabel:'四个字'}]
15
}]
16
}],
表单布局----在布局中使用fieldset
1
items:[
{
2
layout:'column',
3
items:[
{
4
columnWidth:.5,
5
layout : 'form',
6
xtype:'fieldset',
7
title:'俩字',
8
autoHeight:true,
9
defaultType:'textfield',
10
items:[
{fieldLabel:'俩字'},
{fieldLabel:'俩字'}]
11
},
{
12
columnWidth:.5,
13
layout : 'form',
14
xtype:'fieldset',
15
title:'三个字',
16
autoHeight:true,
17
defaultType:'textfield',
18
items:[
{fieldLabel:'三个字'},
{fieldLabel:'三个字'},
{fieldLabel:'三个字'}]
19
}]
20
},
{
21
xtype:'fieldset',
22
title:'四个汉字',
23
autoHeight:true,
24
items:[
{width:345,height:100,xtype:'textarea',fieldLabel:'四个字'}]
25
}]
自定义布局:在表单中加入图片
1
items:[
2
{fieldLabel:'三个字'},
3
{fieldLabel:'三个字'},
4
{fieldLabel:'三个字'},
5
{xtype:'panel',html:'<center><img src="user_female.png"/></center>'}
6
]
复选框和单选框
1

{
2
xtype:'fieldset',
3
title:'多选',
4
defaultType:'checkbox',
5
hideLabels:true,
6
items:[
{boxLabel:'多选一',inputValue:'1',checked:true},
{boxLabel:'多选二',inputValue:'2'},
{boxLabel:'多选三',inputValue:'3'}]
7
},
{
8
xtype:'fieldset',
9
title:'单选',
10
defaultType:'radio',
11
hideLabels:true,
12
items:[
{boxLabel:'单选一',name:'radio',inputValue:'1',checked:true},
{boxLabel:'单选二',name:'radio',inputValue:'2'},
{boxLabel:'单选三',name:'radio',inputValue:'3'}]
13
}
文件上传
1)首先,给form添加fileUpload :true参数,如:
1
var form = new Ext.form.FormPanel(
{
2
labelAlign:'right',
3
title:'form',
4
labelWidth:50,
5
frame:true,
6
fielUpload:true,
7
url:'09_01.jsp',
8
width:280
9
})
2)其次,给form添加一个field,并为它设置inputType : 'file',如:
1
items:[
{
2
xtype:'textfield',
3
fieldLabel:'文本框',
4
name:'file',
5
inputType:'file'
6
}]