ExtJS 4 Grid

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

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

效果图:

 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: 'lisa@simpsons.com', phone: '555-111-1224' },
                    { name: 'Bart', email: 'bart@simpsons.com', phone: '555-222-1234' },
                    { name: 'Homer', email: 'home@simpsons.com', phone: '555-222-1244' },
                    { name: 'Marge', email: 'marge@simpsons.com', 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();//
}); 

 

效果图:

 测试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();//
}); 

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

posted @ 2012-09-03 22:20  高山-景行  阅读(448)  评论(0编辑  收藏  举报