/** * @class Ext.grid.feature.Feature * @extends Ext.util.Observable * * A feature is a type of plugin that is specific to the {@link Ext.grid.Panel}. It provides several * hooks that allows the developer to inject additional functionality at certain points throughout the * grid creation cycle. This class provides the base template methods that are available to the developer, * it should be extended. * * There are several built in features that extend this class, for example: * * - {@link Ext.grid.feature.Grouping} - Shows grid rows in groups as specified by the {@link Ext.data.Store} * - {@link Ext.grid.feature.RowBody} - Adds a body section for each grid row that can contain markup. * - {@link Ext.grid.feature.Summary} - Adds a summary row at the bottom of the grid with aggregate totals for a column. * * ## Using Features * A feature is added to the grid by specifying it an array of features in the configuration: * * var groupingFeature = Ext.create('Ext.grid.feature.Grouping'); * Ext.create('Ext.grid.Panel', { * // other options * features: [groupingFeature] * }); * * @abstract */ Ext.define('Ext.grid.feature.Feature', { extend: 'Ext.util.Observable', alias: 'feature.feature', isFeature: true, disabled: false, /** * @property {Boolean} * Most features will expose additional events, some may not and will * need to change this to false. */ hasFeatureEvent: true, /** * @property {String} * Prefix to use when firing events on the view. * For example a prefix of group would expose "groupclick", "groupcontextmenu", "groupdblclick". */ eventPrefix: null, /** * @property {String} * Selector used to determine when to fire the event with the eventPrefix. */ eventSelector: null, /** * @property {Ext.view.Table} * Reference to the TableView. */ view: null, /** * @property {Ext.grid.Panel} * Reference to the grid panel */ grid: null, /** * Most features will not modify the data returned to the view. * This is limited to one feature that manipulates the data per grid view. */ collectData: false, getFeatureTpl: function() { return ''; }, /** * Abstract method to be overriden when a feature should add additional * arguments to its event signature. By default the event will fire: * - view - The underlying Ext.view.Table * - featureTarget - The matched element by the defined {@link eventSelector} * * The method must also return the eventName as the first index of the array * to be passed to fireEvent. */ getFireEventArgs: function(eventName, view, featureTarget) { return [eventName, view, featureTarget]; }, /** * Approriate place to attach events to the view, selectionmodel, headerCt, etc */ attachEvents: function() { }, getFragmentTpl: function() { return; }, /** * Allows a feature to mutate the metaRowTpl. * The array received as a single argument can be manipulated to add things * on the end/begining of a particular row. */ mutateMetaRowTpl: function(metaRowTplArray) { }, /** * Allows a feature to inject member methods into the metaRowTpl. This is * important for embedding functionality which will become part of the proper * row tpl. */ getMetaRowTplFragments: function() { return {}; }, getTableFragments: function() { return {}; }, /** * Provide additional data to the prepareData call within the grid view. * @param {Object} data The data for this particular record. * @param {Number} idx The row index for this record. * @param {Ext.data.Model} record The record instance * @param {Object} orig The original result from the prepareData call to massage. */ getAdditionalData: function(data, idx, record, orig) { return {}; }, /** * Enable a feature */ enable: function() { this.disabled = false; }, /** * Disable a feature */ disable: function() { this.disabled = true; } });