ExtJS4.2学习(八)表格限制输入数据的类型

如何软件和系统都会对输入的数据类型进行限制。Ext提供了多种数据类型的组件,比如NumberField限制只能输入数字,ComboBox限制只能输入备选项,DateField限制只能选择日期,CheckBox则限制从true和false中选择其一,等等。
效果:

ExtJS4.2学习(八)表格限制输入数据的类型
选择列:
ExtJS4.2学习(八)表格限制输入数据的类型
日期列:
ExtJS4.2学习(八)表格限制输入数据的类型
判断列:
ExtJS4.2学习(八)表格限制输入数据的类型
现在我们来修改之前的数据,让数据类型变得更丰富,如下面的代码:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
Ext.onReady(function(){
    var comboData=[
                   ['0','新版ext教程'],
                   ['1','ext在线支持'],
                   ['2','ext扩展']
                   ];
    var columns = [{
        header:'数字列',
        dataIndex:'number',
        editor:new Ext.form.NumberField({
            allowBlank: false,
            allowNegative: false,
            maxValue: 10
        })
    },{
        header:'选择列',
        dataIndex:'combo',
        editor:new Ext.form.ComboBox({
            store: new Ext.data.SimpleStore({
                fields:['value','text'],
                data: comboData
            }),
            emptyText: '请选择',
            mode: 'local',
            triggerAction: 'all',
            valueField: 'value',
            displayField: 'text',
            editable: false
        }),
        renderer: function(value){
            return comboData[value][1];
        }
    },{
        header:'日期列',
        dataIndex:'date',
        editor:new Ext.form.DateField({
            format: 'Y-m-d',
            minValue: '2007-12-14',
            disabledDays: [0, 6],
            disabledDaysText: '只能选择工作日'
        }),
        renderer: function(value) {
            return Ext.Date.format(value, "Y-m-d");
        }
    },{
        header:'判断列',
        dataIndex:'check',
        editor:new Ext.form.Checkbox({
            allowBlank: false
        }),
        renderer:function(value) {
            return value ? '是' '否';
        }
    }];
    // 放到grid里显示的原始数据
    var data = [
        [1.1,1,new Date(),true],
        [2.2,2,new Date(),false],
        [3.3,0,new Date(),true],
        [4.4,1,new Date(),false],
        [5.5,2,new Date(),true]
    ];
           
       
    var store = new Ext.data.ArrayStore({
        data: data,
        fields: [
            {name: 'number'},
            {name: 'combo'},
            {name: 'date'},
            {name: 'check'}
        ]
    });
    store.load();
       
    var grid = new Ext.grid.GridPanel({
        autoHeight: true,
        renderTo: 'grid',
        store: store,
        columns: columns,
        selType: 'cellmodel',
        plugins: [
            Ext.create('Ext.grid.plugin.CellEditing', {
                clicksToEdit: 1
            })
        ]
    });
});

大家仔细研究一下渲染函数renderer。经常有人会遇到EditorGrid里的ComboBox无法正常显示数据的情况,其实,这是因为少了这个renderer函数。当没写这个函数时,显示的数据是value值,而不是text。毕竟Editor里的编辑器只在实际编辑时起作用,表格与editor质检共享的是数据,显示层都要依靠各自的实现。不够这样做更灵活,不需要两者都使用一样的显示方式。



本文转自shyy8712872 51CTO博客,原文链接:http://blog.51cto.com/shuyangyang/1334068,如需转载请自行联系原作者


上一篇:API大赛之Serverless应用场景


下一篇:阿里云举办 API 大赛为了得到什么?