    /** * A special type of Grid {@link Ext.grid.column.Column} that provides automatic * row numbering. * * Usage: * *     columns: [ *         {xtype: 'rownumberer'}, *         ... *     ] * */ Ext.define('Ext.grid.column.RowNumberer', {    extend: 'Ext.grid.column.Column',    xtype: 'rownumberer',     align: 'right',    ignoreExport: true,     sortable: false,     cell: {        xtype: 'rownumberercell'    },     onAdded: function(parent, instanced) {        var me = this;         me.callParent([parent, instanced]);        me.checkWidth();        me.storeListeners = me.grid.getStore().on({            datachanged: me.checkWidth,            scope: me,            destroyable: true        });    },     onRemoved: function(destroying) {        this.storeListeners.destroy();        this.callParent([destroying]);    },     checkWidth: function() {        var size = String(this.grid.getStore().getCount());                this.setWidth((size.length + 1) + 'em');    },     applyWidth: function(w) {        return w;    }});