BulletzBill
15 Dec 2011, 11:30 AM
Unlike the grid GroupingSummary feature, the grid Summary feature does not have the option to use remote, server-side calculated summaries, so I just extended the feature, duplicating GroupingSummary's remote summary functionality. Hope this helps anyone that was also looking for this!
/**
* Grid RemoteSummary feature
*
* Adds server-side summary calculation support to the Grid Summary,
* that is identical in functionality to Ext.grid.feature.GroupingSummary
*
* Set the remoteRoot property in the feature's config to use remote calculated summaries
* For more info, see: http://docs.sencha.com/ext-js/4-0/#!/api/Ext.grid.feature.GroupingSummary-cfg-remoteRoot
*
* @class Ext.ux.grid.feature.RemoteSummary
* @extends Ext.grid.feature.Summary
* @author Bill Dami
*/
Ext.define('Ext.ux.grid.feature.RemoteSummary', {
extend: 'Ext.grid.feature.Summary',
id: 'remotesummary',
alias: 'feature.remotesummary',
generateSummaryData: function() {
var me = this,
data ={},
remoteData ={},
store = me.view.store,
reader = store.proxy.reader,
columns = me.view.headerCt.getColumnsForTpl(),
i = 0,
length = columns.length,
root, comp;
if (me.remoteRoot && reader.rawData) {
// reset reader root and rebuild extractors to extract summaries data
root = reader.root;
reader.root = me.remoteRoot;
reader.buildExtractors(true);
remoteData = reader.getRoot(reader.rawData);
// restore initial reader configuration
reader.root = root;
reader.buildExtractors(true);
}
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);
if (remoteData.hasOwnProperty(comp.dataIndex)) {
data[comp.id] = remoteData[comp.dataIndex];
}
}
return data;
}
});
/**
* Grid RemoteSummary feature
*
* Adds server-side summary calculation support to the Grid Summary,
* that is identical in functionality to Ext.grid.feature.GroupingSummary
*
* Set the remoteRoot property in the feature's config to use remote calculated summaries
* For more info, see: http://docs.sencha.com/ext-js/4-0/#!/api/Ext.grid.feature.GroupingSummary-cfg-remoteRoot
*
* @class Ext.ux.grid.feature.RemoteSummary
* @extends Ext.grid.feature.Summary
* @author Bill Dami
*/
Ext.define('Ext.ux.grid.feature.RemoteSummary', {
extend: 'Ext.grid.feature.Summary',
id: 'remotesummary',
alias: 'feature.remotesummary',
generateSummaryData: function() {
var me = this,
data ={},
remoteData ={},
store = me.view.store,
reader = store.proxy.reader,
columns = me.view.headerCt.getColumnsForTpl(),
i = 0,
length = columns.length,
root, comp;
if (me.remoteRoot && reader.rawData) {
// reset reader root and rebuild extractors to extract summaries data
root = reader.root;
reader.root = me.remoteRoot;
reader.buildExtractors(true);
remoteData = reader.getRoot(reader.rawData);
// restore initial reader configuration
reader.root = root;
reader.buildExtractors(true);
}
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);
if (remoteData.hasOwnProperty(comp.dataIndex)) {
data[comp.id] = remoteData[comp.dataIndex];
}
}
return data;
}
});