]> git.proxmox.com Git - extjs.git/blame - extjs/packages/ux/classic/src/grid/SubTable.js
add extjs 6.0.1 sources
[extjs.git] / extjs / packages / ux / classic / src / grid / SubTable.js
CommitLineData
6527f429
DM
1/**\r
2 * A small grid nested within a parent grid's row. \r
3 *\r
4 * See the [Kitchen Sink](http://dev.sencha.com/extjs/5.0.1/examples/kitchensink/#customer-grid) for example usage.\r
5 */\r
6Ext.define('Ext.ux.grid.SubTable', {\r
7 extend: 'Ext.grid.plugin.RowExpander',\r
8\r
9 alias: 'plugin.subtable',\r
10\r
11 rowBodyTpl: ['<table class="' + Ext.baseCSSPrefix + 'grid-subtable"><tbody>',\r
12 '{%',\r
13 'this.owner.renderTable(out, values);',\r
14 '%}',\r
15 '</tbody></table>'\r
16 ],\r
17\r
18 init: function(grid) {\r
19 var me = this,\r
20 columns = me.columns,\r
21 len, i, columnCfg;\r
22\r
23 me.callParent(arguments);\r
24\r
25 me.columns = [];\r
26 if (columns) {\r
27 for (i = 0, len = columns.length; i < len; ++i) {\r
28 // Don't register with the component manager, we create them to use\r
29 // their rendering smarts, but don't want to treat them as real components\r
30 columnCfg = Ext.apply({\r
31 preventRegister: true\r
32 }, columns[i]);\r
33 columnCfg.xtype = columnCfg.xtype || 'gridcolumn';\r
34 me.columns.push(Ext.widget(columnCfg));\r
35 }\r
36 }\r
37 },\r
38\r
39 destroy: function() {\r
40 var columns = this.columns,\r
41 len, i;\r
42\r
43 if (columns) {\r
44 for (i = 0, len = columns.length; i < len; ++i) {\r
45 columns[i].destroy();\r
46 }\r
47 }\r
48 this.columns = null;\r
49 this.callParent();\r
50 },\r
51\r
52 getRowBodyFeatureData: function(record, idx, rowValues) {\r
53 this.callParent(arguments);\r
54 rowValues.rowBodyCls += ' ' + Ext.baseCSSPrefix + 'grid-subtable-row';\r
55 },\r
56\r
57 renderTable: function(out, rowValues) {\r
58 var me = this,\r
59 columns = me.columns,\r
60 numColumns = columns.length,\r
61 associatedRecords = me.getAssociatedRecords(rowValues.record),\r
62 recCount = associatedRecords.length,\r
63 rec, column, i, j, value;\r
64\r
65 out.push('<thead>');\r
66 for (j = 0; j < numColumns; j++) {\r
67 out.push('<th class="' + Ext.baseCSSPrefix + 'grid-subtable-header">', columns[j].text, '</th>');\r
68 }\r
69 out.push('</thead>');\r
70 for (i = 0; i < recCount; i++) {\r
71 rec = associatedRecords[i];\r
72 out.push('<tr>');\r
73 for (j = 0; j < numColumns; j++) {\r
74 column = columns[j];\r
75 value = rec.get(column.dataIndex);\r
76 if (column.renderer && column.renderer.call) {\r
77 value = column.renderer.call(column.scope || me, value, {}, rec);\r
78 }\r
79 out.push('<td class="' + Ext.baseCSSPrefix + 'grid-subtable-cell"');\r
80 if (column.width != null) {\r
81 out.push(' style="width:' + column.width + 'px"');\r
82 }\r
83 out.push('><div class="' + Ext.baseCSSPrefix + 'grid-cell-inner">', value, '</div></td>');\r
84 }\r
85 out.push('</tr>');\r
86 }\r
87 },\r
88 \r
89 getRowBodyContentsFn: function(rowBodyTpl) {\r
90 var me = this;\r
91 return function (rowValues) {\r
92 rowBodyTpl.owner = me;\r
93 return rowBodyTpl.applyTemplate(rowValues);\r
94 };\r
95 },\r
96 \r
97 getAssociatedRecords: function(record) {\r
98 return record[this.association]().getRange();\r
99 }\r
100});