ExtJS 4 Grid

原文地址:http://www.showframework.com/2012/07/extjs-4-grids/

此文章翻译的官方文章,感觉还是有一些地方不是很详细

效果图:

ExtJS 4 Grid

 Ext.onReady(function () {

            Ext.define('User', {

                extend: 'Ext.data.Model',

                fields: ['name', 'email', 'phone']

            });



            var userStore = Ext.create('Ext.data.Store', {

                model: 'User',

                //使用内联 数据

                data: [

                    { name: 'Lisa', email: '[email protected]', phone: '555-111-1224' },

                    { name: 'Bart', email: '[email protected]', phone: '555-222-1234' },

                    { name: 'Homer', email: '[email protected]', phone: '555-222-1244' },

                    { name: 'Marge', email: '[email protected]', phone: '555-222-1254' }

                ]

            });

            Ext.create('Ext.grid.Panel', {

                renderTo: Ext.getBody(),

                store:userStore,//数据源

                width: 400,

                height: 200,

                title: 'Application Users',

                columns: [

                    {

                        text: 'name',

                        width: 100,

                        sortable: false,

                        hideable: false,

                        dataIndex: 'name'

                    },

                    {

                        text:'Email Address',

                        width:150,

                        dataIndex: 'email',

                        hidden:false //隐藏了 这列 

                    },

                    {

                        text:'Phone Number',

                        flex:1,

                        dataIndex:'phone'

                    }

                ]

            });

        });

我们创建了一个表格面板渲染到了body中,并且告诉它从之前创建的userStore中取得数据,最后我们定义了表格面板有哪些列,用dataIndex属性配置表格中的列和User Model中的字段的对应关系,Name列宽度是100,不能排序也不能隐藏,Email Address列默认是隐藏的(可以通过其他列的菜单控制显示),Phone Number列自适应表格剩余的宽度

 =================================================================================

 Fit布局+Grid

在Fit布局中,子元素将自动填满整个父容器。注意:在fit布局下,对其子元素设置宽度是无效的。如果在fit布局中放置了多个组件,则只会显示第一个子元素。典型的案例就是当客户要求一个window或panel中放置一个GRID组件,grid组件的大小会随着父容器的大小改变而改变。

这里的Grid的数据类型使用ArrayStore

Fit布局Grid+ArrayStore
var myData = [ 

        ['3m Co',                               71.72, 0.02,  0.03,  '9/1 12:00am'], 

        ['Alcoa Inc',                           29.01, 0.42,  1.47,  '9/1 12:00am'], 

        ['Altria Group Inc',                    83.81, 0.28,  0.34,  '9/1 12:00am'], 

        ['American Express Company',            52.55, 0.01,  0.02,  '9/1 12:00am'], 

        ['American International Group, Inc.',  64.13, 0.31,  0.49,  '9/1 12:00am'], 

        ['AT&T Inc.',                           31.61, -0.48, -1.54, '9/1 12:00am'], 

        ['Boeing Co.',                          75.43, 0.53,  0.71,  '9/1 12:00am'], 

        ['Caterpillar Inc.',                    67.27, 0.92,  1.39,  '9/1 12:00am'], 

        ['Citigroup, Inc.',                     49.37, 0.02,  0.04,  '9/1 12:00am'], 

        ['E.I. du Pont de Nemours and Company', 40.48, 0.51,  1.28,  '9/1 12:00am'], 

        ['Exxon Mobil Corp',                    68.1,  -0.43, -0.64, '9/1 12:00am'], 

        ['General Electric Company',            34.14, -0.08, -0.23, '9/1 12:00am'], 

        ['General Motors Corporation',          30.27, 1.09,  3.74,  '9/1 12:00am'], 

        ['Hewlett-Packard Co.',                 36.53, -0.03, -0.08, '9/1 12:00am'], 

        ['Honeywell Intl Inc',                  38.77, 0.05,  0.13,  '9/1 12:00am'], 

        ['Intel Corporation',                   19.88, 0.31,  1.58,  '9/1 12:00am'], 

        ['International Business Machines',     81.41, 0.44,  0.54,  '9/1 12:00am'], 

        ['Johnson & Johnson',                   64.72, 0.06,  0.09,  '9/1 12:00am'], 

        ['JP Morgan & Chase & Co',              45.73, 0.07,  0.15,  '9/1 12:00am'], 

        ['McDonald\'s Corporation',             36.76, 0.86,  2.40,  '9/1 12:00am'], 

        ['Merck & Co., Inc.',                   40.96, 0.41,  1.01,  '9/1 12:00am'], 

        ['Microsoft Corporation',               25.84, 0.14,  0.54,  '9/1 12:00am'], 

        ['Pfizer Inc',                          27.96, 0.4,   1.45,  '9/1 12:00am'], 

        ['The Coca-Cola Company',               45.07, 0.26,  0.58,  '9/1 12:00am'], 

        ['The Home Depot, Inc.',                34.64, 0.35,  1.02,  '9/1 12:00am'], 

        ['The Procter & Gamble Company',        61.91, 0.01,  0.02,  '9/1 12:00am'], 

        ['United Technologies Corporation',     63.26, 0.55,  0.88,  '9/1 12:00am'], 

        ['Verizon Communications',              35.57, 0.39,  1.11,  '9/1 12:00am'], 

        ['Wal-Mart Stores, Inc.',               45.45, 0.73,  1.63,  '9/1 12:00am'] 

    ]; 

var store = Ext.create('Ext.data.ArrayStore', { 

    fields: [ 

       {name: 'company'}, 

       {name: 'price',      type: 'float'}, 

       {name: 'change',     type: 'float'}, 

       {name: 'pctChange',  type: 'float'}, 

       {name: 'lastChange', type: 'date', dateFormat: 'n/j h:ia'} 

    ], 

    data: myData 

}); 



Ext.define('DataWindow',{ 

    extend : 'Ext.window.Window', 

    title : 'Fit布局示例代码',

    width: 550, 

    height:300,

    layout : 'fit', 

    items : { 

        xtype : 'gridpanel', 

        store: store, 

        columns: [ 

           { 

               text     : 'Company', 

               flex     : 1, 

               sortable : false, 

               dataIndex: 'company' 

           }, 

           { 

               text     : 'Price', 

               width    : 75, 

               sortable : true, 

               renderer : 'usMoney', 

               dataIndex: 'price' 

           }, 

           { 

               text     : 'Change', 

               width    : 75, 

               sortable : true, 

               dataIndex: 'change' 

           }, 

           { 

               text     : '% Change', 

               width    : 75, 

               sortable : true, 

               

               dataIndex: 'pctChange' 

           }, 

           { 

               text     : 'Last Updated', 

               width    : 85, 

               sortable : true, 

               renderer : Ext.util.Format.dateRenderer('m/d/Y'), 

               dataIndex: 'lastChange' 

           }] 

    } 

});



Ext.onReady(function () {

    var win = Ext.create("DataWindow", {

        x: 10,

        y: 20

        

    });

    win.show();//

}); 

 

效果图:

ExtJS 4 Grid

 测试fit布局下放两个panel,因为默认只能显示一个,另一个必须要隐藏,有些类似于Card布局,只显示一个Panel内的内容:

View Code
 var myData = [ 

        ['3m Co',                               71.72, 0.02,  0.03,  '9/1 12:00am'], 

        ['Alcoa Inc',                           29.01, 0.42,  1.47,  '9/1 12:00am'], 

        ['Altria Group Inc',                    83.81, 0.28,  0.34,  '9/1 12:00am'], 

        ['American Express Company',            52.55, 0.01,  0.02,  '9/1 12:00am'], 

        ['American International Group, Inc.',  64.13, 0.31,  0.49,  '9/1 12:00am'], 

        ['AT&T Inc.',                           31.61, -0.48, -1.54, '9/1 12:00am'], 

        ['Boeing Co.',                          75.43, 0.53,  0.71,  '9/1 12:00am'], 

        ['Caterpillar Inc.',                    67.27, 0.92,  1.39,  '9/1 12:00am'], 

        ['Citigroup, Inc.',                     49.37, 0.02,  0.04,  '9/1 12:00am'], 

        ['E.I. du Pont de Nemours and Company', 40.48, 0.51,  1.28,  '9/1 12:00am'], 

        ['Exxon Mobil Corp',                    68.1,  -0.43, -0.64, '9/1 12:00am'], 

        ['General Electric Company',            34.14, -0.08, -0.23, '9/1 12:00am'], 

        ['General Motors Corporation',          30.27, 1.09,  3.74,  '9/1 12:00am'], 

        ['Hewlett-Packard Co.',                 36.53, -0.03, -0.08, '9/1 12:00am'], 

        ['Honeywell Intl Inc',                  38.77, 0.05,  0.13,  '9/1 12:00am'], 

        ['Intel Corporation',                   19.88, 0.31,  1.58,  '9/1 12:00am'], 

        ['International Business Machines',     81.41, 0.44,  0.54,  '9/1 12:00am'], 

        ['Johnson & Johnson',                   64.72, 0.06,  0.09,  '9/1 12:00am'], 

        ['JP Morgan & Chase & Co',              45.73, 0.07,  0.15,  '9/1 12:00am'], 

        ['McDonald\'s Corporation',             36.76, 0.86,  2.40,  '9/1 12:00am'], 

        ['Merck & Co., Inc.',                   40.96, 0.41,  1.01,  '9/1 12:00am'], 

        ['Microsoft Corporation',               25.84, 0.14,  0.54,  '9/1 12:00am'], 

        ['Pfizer Inc',                          27.96, 0.4,   1.45,  '9/1 12:00am'], 

        ['The Coca-Cola Company',               45.07, 0.26,  0.58,  '9/1 12:00am'], 

        ['The Home Depot, Inc.',                34.64, 0.35,  1.02,  '9/1 12:00am'], 

        ['The Procter & Gamble Company',        61.91, 0.01,  0.02,  '9/1 12:00am'], 

        ['United Technologies Corporation',     63.26, 0.55,  0.88,  '9/1 12:00am'], 

        ['Verizon Communications',              35.57, 0.39,  1.11,  '9/1 12:00am'], 

        ['Wal-Mart Stores, Inc.',               45.45, 0.73,  1.63,  '9/1 12:00am'] 

    ]; 

var store = Ext.create('Ext.data.ArrayStore', { 

    fields: [ 

       {name: 'company'}, 

       {name: 'price',      type: 'float'}, 

       {name: 'change',     type: 'float'}, 

       {name: 'pctChange',  type: 'float'}, 

       {name: 'lastChange', type: 'date', dateFormat: 'n/j h:ia'} 

    ], 

    data: myData

});

var grid = Ext.create('Ext.grid.Panel', {

    //xtype: 'gridpanel',

    store: store,

    columns: [

           {

               text: 'Company',

               flex: 1,

               sortable: false,

               dataIndex: 'company'

           },

           {

               text: 'Price',

               width: 75,

               sortable: true,

               renderer: 'usMoney',

               dataIndex: 'price'

           },

           {

               text: 'Change',

               width: 75,

               sortable: true,

               dataIndex: 'change'

           },

           {

               text: '% Change',

               width: 75,

               sortable: true,



               dataIndex: 'pctChange'

           },

           {

               text: 'Last Updated',

               width: 85,

               sortable: true,

               renderer: Ext.util.Format.dateRenderer('m/d/Y'),

               dataIndex: 'lastChange'

           }]

});

function MenuClick(item) {

    var win = Ext.getCmp("win1");

    switch (item.tooltip) {

        case "三维":

            grid.show();

            win.doLayout();

            break;

        case "二维":

            grid.hide();

            win.doLayout();

            break;

        default:

            break;

    }

}

var panel = Ext.create('Ext.panel.Panel', {

    html:'22222222222222'

});

Ext.define('DataWindow', {

    id: 'win1',

    extend: 'Ext.window.Window',

    title: 'Fit布局示例代码',

    width: 550,

    height: 300,

    layout: 'fit',

    dockedItems: [{

        dock: 'top',

        xtype: 'toolbar',

        items: [{

            xtype: 'button',

            text: '三维',

            tooltip: '三维',

            handler:MenuClick

        }, {

            xtype: 'button',

            text: '二维',

            tooltip: '二维',

            handler: MenuClick

        }]

    }],

    items: [grid, panel]

});



Ext.onReady(function () {

    var win = Ext.create("DataWindow", {

        x: 10,

        y: 20

        

    });

    win.show();//

}); 

ExtJS 4 Grid

点击二维展示第二个panel内容。

ExtJS 4 Grid

你可能感兴趣的:(ExtJs)