基本输入控件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();
Ext.QuickTips.init();
 2
 3
 var field1 = new Ext.form.Field(
var field1 = new Ext.form.Field( {
{
 4 fieldLabel:'qtip',
    fieldLabel:'qtip',
 5 msgTarget:'qtip'
    msgTarget:'qtip'
 6 });
});
 7
 var field2 = new Ext.form.Field(
var field2 = new Ext.form.Field( {
{
 8 fieldLabel:'title',
    fieldLabel:'title',
 9 msgTarget:'title'
    msgTarget:'title'
10 });
});
11
 var field3 = new Ext.form.Field(
var field3 = new Ext.form.Field( {
{
12 fieldLabel:'side',
    fieldLabel:'side',
13 msgTarget:'side'
    msgTarget:'side'
14 });
});
15
 var field4 = new Ext.form.Field(
var field4 = new Ext.form.Field( {
{
16 fieldLabel:'under',
    fieldLabel:'under',
17 msgTarget:'under'
    msgTarget:'under'
18 });
});
19
20
 var form = new Ext.form.FormPanel(
var form = new Ext.form.FormPanel( {
{
21 title:'form',
    title:'form',
22 items:[field1,field2,field3,field4],
    items:[field1,field2,field3,field4],
23 renderTo:'form'
    renderTo:'form'
24 });
});
25
26 field1.markInvalid();
field1.markInvalid();
27 field2.markInvalid();
field2.markInvalid();
28 field3.markInvalid();
field3.markInvalid();
29 field4.markInvalid();
field4.markInvalid();
30
 
下拉输入框Ext.form.TriggerField
    Ext.form.TriggerField是ComboBox, DateField和TimeField的父类,它既可以通过手工录入数据,也可以通过选择录入数据。为了显示下拉选择的功能,需要覆写它的onTriggerClick()函数以实现弹出窗口。
 1
 var triggerField = new Ext.form.TriggerField(
var triggerField = new Ext.form.TriggerField( {
{
 2 fieldLabel:'选择',
    fieldLabel:'选择',
 3 name:'name',
    name:'name',
 4
 onSelect:function(record)
    onSelect:function(record) {},
{},
 5
 onTriggerClick:function()
    onTriggerClick:function() {
{
 6
 if (this.menu == null)
        if (this.menu == null)  {
{
 7 this.menu = selectMenu;  //selectMenu是一个预先创建的一个Ext.menu.Menu实例,实例中可以放按钮,表格等控件。
            this.menu = selectMenu;  //selectMenu是一个预先创建的一个Ext.menu.Menu实例,实例中可以放按钮,表格等控件。
 8 }
        }
 9 this.menu.show(this.el,"tl-bl?");  //tl-bl?标示弹出的菜单的左上角或左下角与Ext.form.TriggerField对齐
        this.menu.show(this.el,"tl-bl?");  //tl-bl?标示弹出的菜单的左上角或左下角与Ext.form.TriggerField对齐
10 }
    }
11 });
}); 
使用表单提交数据
 1
 Ext.onReady(function()
Ext.onReady(function() {
{
 2
 var form = new Ext.form.FormPanel(
    var form = new Ext.form.FormPanel( {
{
 3 defaultType:'textfield',
        defaultType:'textfield',
 4 labelAlign:'right',
        labelAlign:'right',
 5 title:'form',
        title:'form',
 6 labelWidth:50,
        labelWidth:50,
 7 frame:true,
        frame:true,
 8 width:220,
        width:220,
 9 url:'04_01.jsp',
        url:'04_01.jsp',
10
 items:[
        items:[ {
{
11 fieldLabel:'文本框',
            fieldLabel:'文本框',
12 name:'text'
            name:'text'
13 }],
        }],
14
 buttons:[
        buttons:[ {
{
15 text:'按钮',
            text:'按钮',
16
 handler:function()
            handler:function() {
{
17
 form.getForm().submit(
                form.getForm().submit( {
{
18
 success:function(form,action)
                    success:function(form,action) {
{
19 Ext.Msg.alert('信息',action.result.msg);
                        Ext.Msg.alert('信息',action.result.msg);
20 },
                    },
21
 failure:function()
                    failure:function() {
{
22 Ext.Msg.alert('错误','操作失败!');
                        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()
handler:function() {
{
2 form.getForm().getEl().dom.action = '04_01.jsp';
    form.getForm().getEl().dom.action = '04_01.jsp';
3 form.getForm().getEl().com.submit();
    form.getForm().getEl().com.submit();
4 }
} 
单纯Ajax
 1 Ext.lib.Ajax.request(
Ext.lib.Ajax.request(
 2 'POST',
    'POST',
 3 '04_01.jsp',
    '04_01.jsp',
 4
 
     {
{
 5
 success:function(response)
        success:function(response) {
{
 6 var result = Ext.decode(response.responseText);
            var result = Ext.decode(response.responseText);
 7 Ext.Msg.alert('信息',result.msg);
            Ext.Msg.alert('信息',result.msg);
 8 },
        },
 9
 failure:function()
        failure:function() {}
{}
10 }
    }
11 )
) 
表单布局----默认的平铺布局
1
 items:
items: {
{
2
 
     {fieldLabel:'俩字'},
{fieldLabel:'俩字'},
3
 
     {fieldLabel:'三个字'},
{fieldLabel:'三个字'},
4
 
     {fieldLabel:'四个汉字'},
{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:[
        items:[ {
{
 2 layout:'column',
            layout:'column',
 3
 items:[
            items:[ {
{
 4 columnWidth:.33,
                columnWidth:.33,
 5 layout : 'form',
                layout : 'form',
 6
 items:[
                items:[ {xtype:'textfield',fieldLabel:'俩字'}]
{xtype:'textfield',fieldLabel:'俩字'}]
 7
 },
            }, {
{
 8 columnWidth:.33,
                columnWidth:.33,
 9 layout : 'form',
                layout : 'form',
10
 items:[
                items:[ {xtype:'textfield',fieldLabel:'三个字'}]
{xtype:'textfield',fieldLabel:'三个字'}]            
11
 },
            }, {
{
12 columnWidth:.33,
                columnWidth:.33,
13 layout : 'form',
                layout : 'form',
14
 items:[
                items:[ {xtype:'textfield',fieldLabel:'四个字'}]
{xtype:'textfield',fieldLabel:'四个字'}]
15 }]
            }]
16 }],
        }], 
表单布局----在布局中使用fieldset
 1
 items:[
items:[ {
{
 2 layout:'column',
    layout:'column',
 3
 items:[
    items:[ {
{
 4 columnWidth:.5,
            columnWidth:.5,
 5 layout : 'form',
            layout : 'form',
 6 xtype:'fieldset',
            xtype:'fieldset',
 7 title:'俩字',
            title:'俩字',
 8 autoHeight:true,
            autoHeight:true,
 9 defaultType:'textfield',
            defaultType:'textfield',
10
 items:[
            items:[ {fieldLabel:'俩字'},
{fieldLabel:'俩字'}, {fieldLabel:'俩字'}]
{fieldLabel:'俩字'}]
11
 },
        }, {
{
12 columnWidth:.5,
            columnWidth:.5,
13 layout : 'form',
            layout : 'form',
14 xtype:'fieldset',
            xtype:'fieldset',
15 title:'三个字',
            title:'三个字',
16 autoHeight:true,
            autoHeight:true,
17 defaultType:'textfield',
            defaultType:'textfield',
18
 items:[
            items:[ {fieldLabel:'三个字'},
{fieldLabel:'三个字'}, {fieldLabel:'三个字'},
{fieldLabel:'三个字'}, {fieldLabel:'三个字'}]
{fieldLabel:'三个字'}]
19 }]
        }]
20
 },
    }, {
{
21 xtype:'fieldset',
        xtype:'fieldset',
22 title:'四个汉字',
        title:'四个汉字',
23 autoHeight:true,
        autoHeight:true,
24
 items:[
        items:[ {width:345,height:100,xtype:'textarea',fieldLabel:'四个字'}]
{width:345,height:100,xtype:'textarea',fieldLabel:'四个字'}]
25 }]
}] 
自定义布局:在表单中加入图片
1 items:[
items:[
2
 
     {fieldLabel:'三个字'},
{fieldLabel:'三个字'},
3
 
     {fieldLabel:'三个字'},
{fieldLabel:'三个字'},
4
 
     {fieldLabel:'三个字'},
{fieldLabel:'三个字'},
5
 
     {xtype:'panel',html:'<center><img src="user_female.png"/></center>'}
{xtype:'panel',html:'<center><img src="user_female.png"/></center>'}
6 ]
] 
复选框和单选框
 1

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