X-Git-Url: http://git.ithinksw.org/extjs.git/blobdiff_plain/6746dc89c47ed01b165cc1152533605f97eb8e8d..HEAD:/src/grid/feature/GroupingSummary.js diff --git a/src/grid/feature/GroupingSummary.js b/src/grid/feature/GroupingSummary.js index e7da667a..5ca4bb3c 100644 --- a/src/grid/feature/GroupingSummary.js +++ b/src/grid/feature/GroupingSummary.js @@ -15,12 +15,12 @@ If you are unsure which license is appropriate for your use, please contact the /** * @class Ext.grid.feature.GroupingSummary * @extends Ext.grid.feature.Grouping - * + * * This feature adds an aggregate summary row at the bottom of each group that is provided - * by the {@link Ext.grid.feature.Grouping} feature. There are 2 aspects to the summary: - * + * by the {@link Ext.grid.feature.Grouping} feature. There are two aspects to the summary: + * * ## Calculation - * + * * The summary value needs to be calculated for each column in the grid. This is controlled * by the summaryType option specified on the column. There are several built in summary types, * which can be specified as a string on the column configuration. These call underlying methods @@ -34,9 +34,9 @@ If you are unsure which license is appropriate for your use, please contact the * * Alternatively, the summaryType can be a function definition. If this is the case, * the function is called with an array of records to calculate the summary value. - * + * * ## Rendering - * + * * Similar to a column, the summary also supports a summaryRenderer function. This * summaryRenderer is called before displaying a value. The function is optional, if * not specified the default calculated value is shown. The summaryRenderer is called with: @@ -44,9 +44,10 @@ If you are unsure which license is appropriate for your use, please contact the * - value {Object} - The calculated value. * - summaryData {Object} - Contains all raw summary values for the row. * - field {String} - The name of the field we are calculating - * + * * ## Example Usage * + * @example * Ext.define('TestResult', { * extend: 'Ext.data.Model', * fields: ['student', 'subject', { @@ -54,7 +55,7 @@ If you are unsure which license is appropriate for your use, please contact the * type: 'int' * }] * }); - * + * * Ext.create('Ext.grid.Panel', { * width: 200, * height: 240, @@ -89,7 +90,7 @@ If you are unsure which license is appropriate for your use, please contact the * text: 'Name', * summaryType: 'count', * summaryRenderer: function(value){ - * return Ext.String.format('{0} student{1}', value, value !== 1 ? 's' : ''); + * return Ext.String.format('{0} student{1}', value, value !== 1 ? 's' : ''); * } * }, { * dataIndex: 'mark', @@ -99,20 +100,20 @@ If you are unsure which license is appropriate for your use, please contact the * }); */ Ext.define('Ext.grid.feature.GroupingSummary', { - + /* Begin Definitions */ - + extend: 'Ext.grid.feature.Grouping', - + alias: 'feature.groupingsummary', - + mixins: { summary: 'Ext.grid.feature.AbstractSummary' }, - + /* End Definitions */ - + /** * Modifies the row template to include the summary row. * @private @@ -120,7 +121,7 @@ Ext.define('Ext.grid.feature.GroupingSummary', { */ getFeatureTpl: function() { var tpl = this.callParent(arguments); - + if (this.showSummaryRow) { // lop off the end so we can attach it tpl = tpl.replace('', ''); @@ -128,7 +129,7 @@ Ext.define('Ext.grid.feature.GroupingSummary', { } return tpl; }, - + /** * Gets any fragments needed for the template. * @private @@ -137,7 +138,7 @@ Ext.define('Ext.grid.feature.GroupingSummary', { getFragmentTpl: function() { var me = this, fragments = me.callParent(); - + Ext.apply(fragments, me.getSummaryFragments()); if (me.showSummaryRow) { // this gets called before render, so we'll setup the data here. @@ -146,7 +147,7 @@ Ext.define('Ext.grid.feature.GroupingSummary', { } return fragments; }, - + /** * Gets the data for printing a template row * @private @@ -162,7 +163,7 @@ Ext.define('Ext.grid.feature.GroupingSummary', { name = me.summaryGroups[index - 1].name, active = me.summaryData[name], column; - + for (; i < length; ++i) { column = columns[i]; column.gridSummaryValue = this.getColumnValue(column, active); @@ -170,7 +171,7 @@ Ext.define('Ext.grid.feature.GroupingSummary', { } return data; }, - + /** * Generates all of the summary data to be used when processing the template * @private @@ -192,16 +193,15 @@ Ext.define('Ext.grid.feature.GroupingSummary', { root, key, comp; - + for (i = 0, length = groups.length; i < length; ++i) { data[groups[i].name] = {}; } - - /** - * @cfg {String} remoteRoot. The name of the property - * which contains the Array of summary objects. Defaults to undefined. - * It allows to use server-side calculated summaries. - */ + + /** + * @cfg {String} [remoteRoot=undefined] The name of the property which contains the Array of + * summary objects. It allows to use server-side calculated summaries. + */ if (me.remoteRoot && reader.rawData) { // reset reader root and rebuild extractors to extract summaries data root = reader.root; @@ -214,21 +214,21 @@ Ext.define('Ext.grid.feature.GroupingSummary', { reader.root = root; reader.buildExtractors(true); } - + for (i = 0, length = columns.length; i < length; ++i) { comp = Ext.getCmp(columns[i].id); fieldData = me.getSummary(store, comp.summaryType, comp.dataIndex, true); - + for (key in fieldData) { if (fieldData.hasOwnProperty(key)) { data[key][comp.id] = fieldData[key]; } } - + for (key in remoteData) { if (remoteData.hasOwnProperty(key)) { remote = remoteData[key][comp.dataIndex]; - if (remote !== undefined) { + if (remote !== undefined && data[key] !== undefined) { data[key][comp.id] = remote; } }