/** * The Result object stores all calculated values for the aggregate dimensions * for a left/top item pair and all records that are used to calculate * those values. * * It is used by the {@link Ext.pivot.matrix.Local} matrix class. */Ext.define('Ext.pivot.result.Local', { extend: 'Ext.pivot.result.Base', alias: 'pivotresult.local', alternateClassName: [ 'Mz.aggregate.matrix.Result' ], /** * @property {Ext.data.Model[]} records * * Array of records for the left/top axis keys pair. Only available for a * {@link Ext.pivot.matrix.Local Local} matrix. */ records: null, constructor: function(config) { this.records = []; return this.callParent(arguments); }, destroy: function() { this.records.length = 0; this.records = null; return this.callParent(arguments); }, /** * @method calculate * @inheritdoc */ calculate: function() { var me = this, i, dimension, length = me.matrix.aggregate.getCount(); // for each pivot aggregate dimension calculate the value and call addValue for (i = 0; i < length; i++) { dimension = me.matrix.aggregate.getAt(i); me.addValue( dimension.getId(), Ext.callback(dimension.aggregatorFn, dimension.getScope() || 'self.controller', [me.records, dimension.dataIndex, me.matrix, me.leftKey, me.topKey], 0, me.matrix.cmp) ); } }, /** * @method calculateByFn * @inheritdoc */ calculateByFn: function(key, dataIndex, aggFn) { var me = this, v; if (Ext.isString(aggFn)) { aggFn = Ext.pivot.Aggregators[aggFn]; } //<debug> if (!Ext.isFunction(aggFn)) { Ext.raise('Invalid function provided!'); } //</debug> v = aggFn(me.records, dataIndex, me.matrix, me.leftKey, me.topKey); me.addValue(key, v); return v; }, /** * Add the specified record to the internal records storage. * These records will be used for calculating the pivot aggregate dimension values. * This should be used only when all calculations are done locally and not remotely. * * @param {Ext.data.Model} record */ addRecord: function(record) { this.records.push(record); }, removeRecord: function(record) { Ext.Array.remove(this.records, record); }});