Vi Veri Veniversum Vivus Vici
The main idea is have some div where nested grid will be rendered

  1. Ext4.define('Company', {
  2. extend: 'Ext4.data.Model',
  3. fields: [
  4. {name: 'id', type: 'int' },
  5. {name: 'company', type: 'string'},
  6. {name: 'price', type: 'float'},
  7. {name: 'change', type: 'float'},
  8. {name: 'pctChange', type: 'float'},
  9. {name: 'lastChange', type: 'date', dateFormat: 'n/j h:ia'},
  10. {name: 'industry'},
  11. {name: 'desc'}
  12. ]
  13. });
  14.  
  15. // Array data for the grids
  16. Ext4.grid.dummyData = [
  17. ['3m Co',71.72,0.02,0.03,'9/1 12:00am', 'Manufacturing'],
  18. ['Alcoa Inc',29.01,0.42,1.47,'9/1 12:00am', 'Manufacturing'],
  19. ['Altria Group Inc',83.81,0.28,0.34,'9/1 12:00am', 'Manufacturing'],
  20. ['American Express Company',52.55,0.01,0.02,'9/1 12:00am', 'Finance'],
  21. ['American International Group, Inc.',64.13,0.31,0.49,'9/1 12:00am', 'Services'],
  22. ['AT&T Inc.',31.61,-0.48,-1.54,'9/1 12:00am', 'Services'],
  23. ['Boeing Co.',75.43,0.53,0.71,'9/1 12:00am', 'Manufacturing'],
  24. ['Caterpillar Inc.',67.27,0.92,1.39,'9/1 12:00am', 'Services'],
  25. ['Citigroup, Inc.',49.37,0.02,0.04,'9/1 12:00am', 'Finance'],
  26. ['E.I. du Pont de Nemours and Company',40.48,0.51,1.28,'9/1 12:00am', 'Manufacturing'],
  27. ['Exxon Mobil Corp',68.1,-0.43,-0.64,'9/1 12:00am', 'Manufacturing'],
  28. ['General Electric Company',34.14,-0.08,-0.23,'9/1 12:00am', 'Manufacturing'],
  29. ['General Motors Corporation',30.27,1.09,3.74,'9/1 12:00am', 'Automotive'],
  30. ['Hewlett-Packard Co.',36.53,-0.03,-0.08,'9/1 12:00am', 'Computer'],
  31. ['Honeywell Intl Inc',38.77,0.05,0.13,'9/1 12:00am', 'Manufacturing'],
  32. ['Intel Corporation',19.88,0.31,1.58,'9/1 12:00am', 'Computer'],
  33. ['International Business Machines',81.41,0.44,0.54,'9/1 12:00am', 'Computer'],
  34. ['Johnson & Johnson',64.72,0.06,0.09,'9/1 12:00am', 'Medical'],
  35. ['JP Morgan & Chase & Co',45.73,0.07,0.15,'9/1 12:00am', 'Finance'],
  36. ["McDonald's Corporation",36.76,0.86,2.40,'9/1 12:00am', 'Food'],
  37. ['Merck & Co., Inc.',40.96,0.41,1.01,'9/1 12:00am', 'Medical'],
  38. ['Microsoft Corporation',25.84,0.14,0.54,'9/1 12:00am', 'Computer'],
  39. ['Pfizer Inc',27.96,0.4,1.45,'9/1 12:00am', 'Services', 'Medical'],
  40. ['The Coca-Cola Company',45.07,0.26,0.58,'9/1 12:00am', 'Food'],
  41. ['The Home Depot, Inc.',34.64,0.35,1.02,'9/1 12:00am', 'Retail'],
  42. ['The Procter & Gamble Company',61.91,0.01,0.02,'9/1 12:00am', 'Manufacturing'],
  43. ['United Technologies Corporation',63.26,0.55,0.88,'9/1 12:00am', 'Computer'],
  44. ['Verizon Communications',35.57,0.39,1.11,'9/1 12:00am', 'Services'],
  45. ['Wal-Mart Stores, Inc.',45.45,0.73,1.63,'9/1 12:00am', 'Retail'],
  46. ['Walt Disney Company (The) (Holding Company)',29.89,0.24,0.81,'9/1 12:00am', 'Services']
  47. ];
  48.  
  49. // add in some dummy descriptions
  50. for(var i = 0; i < Ext4.grid.dummyData.length; i++) {
  51. Ext4.grid.dummyData[i].unshift(i);
  52. Ext4.grid.dummyData[i].push('Lorem ipsum dolor sit amet, consectetuer adipiscing elit. Sed metus nibh, sodales a, porta at, vulputate eget, dui. Pellentesque ut nisl. ');
  53. }
  54.  
  55. var getLocalStore = function(rand) {
  56. var data = Ext4.grid.dummyData,
  57. len = Math.round(Math.random() * 10) + 3, i = 0;
  58. if (rand) {
  59. data = [];
  60. for (; i < len; i++) {
  61. data.push([
  62. i + 1,
  63. 'Company ' + (Math.round(Math.random() * 1000) + 1),
  64. (Math.random() * 100 + 1).toFixed(2)
  65. ]);
  66. }
  67. }
  68. return Ext4.create('Ext4.data.ArrayStore', {
  69. model: 'Company',
  70. data: data
  71. });
  72. };
  73.  
  74.  
  75. var grid1 = Ext4.create('Ext4.grid.Panel', {
  76. store: getLocalStore(),
  77. viewConfig: {
  78. listeners: {
  79. expandbody: function(row, record, rowBody) {
  80. console.log(arguments);
  81. if (!row.grid) {
  82. console.log('create grid for ' + record.get('id'));
  83. var sg = Ext4.create('Ext4.grid.Panel', {
  84. forceFit: true,
  85. store: getLocalStore(true),
  86. columns: [
  87. {text: "Company", dataIndex: 'company'},
  88. {text: "Price", dataIndex: 'price'}
  89. ],
  90. renderTo: 'sg-' + record.get('id') ,
  91. params:{
  92. id:record.get('id')
  93. }
  94. });
  95. row.grid = sg;
  96. }
  97. }
  98. }
  99. },
  100. columns: [
  101. {text: "Company", flex: 1, dataIndex: 'company'},
  102. {text: "Price", renderer: Ext4.util.Format.usMoney, dataIndex: 'price'},
  103. {text: "Change", dataIndex: 'change'},
  104. {text: "% Change", dataIndex: 'pctChange'},
  105. {text: "Last Updated", renderer: Ext4.util.Format.dateRenderer('m/d/Y'), dataIndex: 'lastChange'}
  106. ],
  107. width: 600,
  108. height: 300,
  109. plugins: [{
  110. ptype: 'rowexpander',
  111. rowBodyTpl : [
  112. '<p><b>Company:</b> {company}</p>',
  113. '<p><b>Summary:</b> {desc}</p>',
  114. '<div id="sg-{id}"></div>'
  115. ]
  116. }],
  117. margin: '0 0 20 0',
  118. });
  119.  
  120. var w = new Ext4.window.Window({
  121. title: 'test',
  122. items: [grid1]
  123. });
  124. w.show();
  125.  
  126.  
  127.  


@темы: ExtJS 4