X-Git-Url: http://git.ithinksw.org/extjs.git/blobdiff_plain/6a7e4474cba9d8be4b2ec445e10f1691f7277c50..7a654f8d43fdb43d78b63d90528bed6e86b608cc:/docs/source/AbstractSummary.html diff --git a/docs/source/AbstractSummary.html b/docs/source/AbstractSummary.html new file mode 100644 index 00000000..74be273f --- /dev/null +++ b/docs/source/AbstractSummary.html @@ -0,0 +1,124 @@ +
\ No newline at end of file/** + * A small abstract class that contains the shared behaviour for any summary + * calculations to be used in the grid. + * @class Ext.grid.feature.AbstractSummary + * @extends Ext.grid.feature.Feature + * @ignore + */ +Ext.define('Ext.grid.feature.AbstractSummary', { + + /* Begin Definitions */ + + extend: 'Ext.grid.feature.Feature', + + alias: 'feature.abstractsummary', + + /* End Definitions */ + + /** + * @cfg {Boolean} showSummaryRow True to show the summary row. Defaults to <tt>true</tt>. + */ + showSummaryRow: true, + + // @private + nestedIdRe: /\{\{id\}([\w\-]*)\}/g, + + /** + * Toggle whether or not to show the summary row. + * @param {Boolan} visible True to show the summary row + */ + toggleSummaryRow: function(visible){ + this.showSummaryRow = !!visible; + }, + + /** + * Gets any fragments to be used in the tpl + * @private + * @return {Object} The fragments + */ + getSummaryFragments: function(){ + var fragments = {}; + if (this.showSummaryRow) { + Ext.apply(fragments, { + printSummaryRow: Ext.bind(this.printSummaryRow, this) + }); + } + return fragments; + }, + + /** + * Prints a summary row + * @private + * @param {Object} index The index in the template + * @return {String} The value of the summary row + */ + printSummaryRow: function(index){ + var inner = this.view.getTableChunker().metaRowTpl.join(''); + + inner = inner.replace('x-grid-row', 'x-grid-row-summary'); + inner = inner.replace('{{id}}', '{gridSummaryValue}'); + inner = inner.replace(this.nestedIdRe, '{id$1}'); + inner = inner.replace('{[this.embedRowCls()]}', '{rowCls}'); + inner = inner.replace('{[this.embedRowAttr()]}', '{rowAttr}'); + inner = Ext.create('Ext.XTemplate', inner, { + firstOrLastCls: Ext.view.TableChunker.firstOrLastCls + }); + + return inner.applyTemplate({ + columns: this.getPrintData(index) + }); + }, + + /** + * Gets the value for the column from the attached data. + * @param {Ext.grid.column.Column} column The header + * @param {Object} data The current data + * @return {String} The value to be rendered + */ + getColumnValue: function(column, data){ + var comp = Ext.getCmp(column.id), + value = data[column.dataIndex], + renderer = comp.summaryRenderer || comp.renderer; + + if (renderer) { + value = renderer.call(comp.scope || this, value, data, column.dataIndex); + } + return value; + }, + + /** + * Get the summary data for a field. + * @private + * @param {Ext.data.Store} store The store to get the data from + * @param {String/Function} type The type of aggregation. If a function is specified it will + * be passed to the stores aggregate function. + * @param {String} field The field to aggregate on + * @param {Boolean} group True to aggregate in grouped mode + * @return {Mixed} See the return type for the store functions. + */ + getSummary: function(store, type, field, group){ + if (type) { + if (Ext.isFunction(type)) { + return store.aggregate(type, null, group); + } + + switch (type) { + case 'count': + return store.count(group); + case 'min': + return store.min(field, group); + case 'max': + return store.max(field, group); + case 'sum': + return store.sum(field, group); + case 'average': + return store.average(field, group); + default: + return group ? {} : ''; + + } + } + } + +}); +