原文地址: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,//数据源 400, height: 200, title: 'Application Users', columns: [ { text: 'name', 100, sortable: false, hideable: false, dataIndex: 'name' }, { text:'Email Address', 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布局示例代码', 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', 75, sortable: true, renderer: 'usMoney', dataIndex: 'price' }, { text: 'Change', 75, sortable: true, dataIndex: 'change' }, { text: '% Change', 75, sortable: true, dataIndex: 'pctChange' }, { text: 'Last Updated', 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布局示例代码', 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内容。