| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186 | <!DOCTYPE html><html><head>  <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />  <title>The source code</title>  <link href="../resources/prettify/prettify.css" type="text/css" rel="stylesheet" />  <script type="text/javascript" src="../resources/prettify/prettify.js"></script>  <style type="text/css">    .highlight { display: block; background-color: #ddd; }  </style>  <script type="text/javascript">    function highlight() {      document.getElementById(location.hash.replace(/#/, "")).className = "highlight";    }  </script></head><body onload="prettyPrint(); highlight();">  <pre class="prettyprint lang-js"><span id='Ext-grid-feature-Summary'>/**</span> * This feature is used to place a summary row at the bottom of the grid. If using a grouping,  * see {@link Ext.grid.feature.GroupingSummary}. There are 2 aspects to calculating the summaries,  * calculation and rendering. *  * ## 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 * on the store: * *  - {@link Ext.data.Store#count count} *  - {@link Ext.data.Store#sum sum} *  - {@link Ext.data.Store#min min} *  - {@link Ext.data.Store#max max} *  - {@link Ext.data.Store#average average} * * 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: * *  - 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', { *             name: 'mark', *             type: 'int' *         }] *     }); *      *     Ext.create('Ext.grid.Panel', { *         width: 200, *         height: 140, *         renderTo: document.body, *         features: [{ *             ftype: 'summary' *         }], *         store: { *             model: 'TestResult', *             data: [{ *                 student: 'Student 1', *                 mark: 84 *             },{ *                 student: 'Student 2', *                 mark: 72 *             },{ *                 student: 'Student 3', *                 mark: 96 *             },{ *                 student: 'Student 4', *                 mark: 68 *             }] *         }, *         columns: [{ *             dataIndex: 'student', *             text: 'Name', *             summaryType: 'count', *             summaryRenderer: function(value, summaryData, dataIndex) { *                 return Ext.String.format('{0} student{1}', value, value !== 1 ? 's' : '');  *             } *         }, { *             dataIndex: 'mark', *             text: 'Mark', *             summaryType: 'average' *         }] *     }); */Ext.define('Ext.grid.feature.Summary', {        /* Begin Definitions */        extend: 'Ext.grid.feature.AbstractSummary',        alias: 'feature.summary',        /* End Definitions */    <span id='Ext-grid-feature-Summary-method-getFragmentTpl'>    /**</span>     * Gets any fragments needed for the template.     * @private     * @return {Object} The fragments     */    getFragmentTpl: function() {        // this gets called before render, so we'll setup the data here.        this.summaryData = this.generateSummaryData();         return this.getSummaryFragments();    },    <span id='Ext-grid-feature-Summary-method-getTableFragments'>    /**</span>     * Overrides the closeRows method on the template so we can include our own custom     * footer.     * @private     * @return {Object} The custom fragments     */    getTableFragments: function(){        if (this.showSummaryRow) {            return {                closeRows: this.closeRows            };        }    },    <span id='Ext-grid-feature-Summary-method-closeRows'>    /**</span>     * Provide our own custom footer for the grid.     * @private     * @return {String} The custom footer     */    closeRows: function() {        return '</tpl>{[this.printSummaryRow()]}';    },    <span id='Ext-grid-feature-Summary-method-getPrintData'>    /**</span>     * Gets the data for printing a template row     * @private     * @param {Number} index The index in the template     * @return {Array} The template values     */    getPrintData: function(index){        var me = this,            columns = me.view.headerCt.getColumnsForTpl(),            i = 0,            length = columns.length,            data = [],            active = me.summaryData,            column;                    for (; i < length; ++i) {            column = columns[i];            column.gridSummaryValue = this.getColumnValue(column, active);            data.push(column);        }        return data;    },    <span id='Ext-grid-feature-Summary-method-generateSummaryData'>    /**</span>     * Generates all of the summary data to be used when processing the template     * @private     * @return {Object} The summary data     */    generateSummaryData: function(){        var me = this,            data = {},            store = me.view.store,            columns = me.view.headerCt.getColumnsForTpl(),            i = 0,            length = columns.length,            fieldData,            key,            comp;                    for (i = 0, length = columns.length; i < length; ++i) {            comp = Ext.getCmp(columns[i].id);            data[comp.id] = me.getSummary(store, comp.summaryType, comp.dataIndex, false);        }        return data;    }});</pre></body></html>
 |