we are using ExtJs 4.0.1.com and have a problem with the rowexpander plugin for grids.
As it seems everythings works when the plugin is used on a Ext.grid.Panel directly but not when used
in a inherited widget. The following is a simple modification of the original grid-plugins.js

    enabled: true
Ext.Loader.setPath('Ext.ux', '../ux');


    Ext.define('Company', {
        extend: 'Ext.data.Model',
        fields: [
            {name: 'company'},
            {name: 'price', type: 'float'},
            {name: 'change', type: 'float'},
            {name: 'pctChange', type: 'float'},
            {name: 'lastChange', type: 'date', dateFormat: 'n/j h:ia'},
            {name: 'industry'},
            {name: 'desc'}
    // Array data for the grids
    Ext.grid.dummyData = [
        ['3m Co',71.72,0.02,0.03,'9/1 12:00am', 'Manufacturing'],
        ['Alcoa Inc',29.01,0.42,1.47,'9/1 12:00am', 'Manufacturing'],
        ['Altria Group Inc',83.81,0.28,0.34,'9/1 12:00am', 'Manufacturing'],
        ['American Express Company',52.55,0.01,0.02,'9/1 12:00am', 'Finance'],
        ['American International Group, Inc.',64.13,0.31,0.49,'9/1 12:00am', 'Services']

    var getLocalStore = function() {
        return Ext.create('Ext.data.ArrayStore', {
        	groupField: 'company',
        	model: 'Company',
            data: Ext.grid.dummyData
    Ext.define('myGridPanel', {
        extend: 'Ext.grid.Panel',
        alias: 'widget.myGridPanel',
        initComponent: function(){
            var _self = this;
    		// -----------------------------------------------------
            // Public Interface 
            // -----------------------------------------------------
            // -----------------------------------------------------
            Ext.apply(this, {
            		store: getLocalStore(),
    	            columns: [{
    	                header: 'company',
    	                dataIndex: 'company'
    	            }, {
    	                header: 'price',
    	                dataIndex: 'price'
    	            }, {
    	                header: 'change',
    	                dataIndex: 'change'
    	            plugins: [{
    	                ptype: 'rowexpander',
    	                rowBodyTpl : [
    	            features: [{
    	                ftype: 'grouping',
    					enableGroupingMenu: false,
    	                groupHeaderTpl: '{name} ({rows.length})', //print the number of items in the group
    	                startCollapsed: false // start all groups collapsed

            // call parent
            myGridPanel.superclass.initComponent.apply(this, arguments);
        onRender: function(){
            myGridPanel.superclass.onRender.apply(this, arguments);

    Ext.create('Ext.Viewport', {
        layout: {
            type: 'fit',
            padding: 5
        items: {
        	id: 'myGridPanel',
        	xtype: 'myGridPanel'
In the constructor of Ext.AbstractComponent I found the following:

if (me.plugins) {
    me.plugins = [].concat(me.plugins);
    for (i = 0, len = me.plugins.length; i < len; i++) {
        me.plugins[i] = me.constructPlugin(me.plugins[i]);  // too early ?, wait for initComponent

me.initComponent(); // plugin is configured here via Ext.apply

// ititComponent gets a chance to change the id property before registering

// Dont pass the config so that it is not applied to 'this' again
me.mixins.state.constructor.call(me, config);

// Move this into Observable?
if (me.plugins) {
    me.plugins = [].concat(me.plugins);
    for (i = 0, len = me.plugins.length; i < len; i++) {
        me.plugins[i] = me.initPlugin(me.plugins[i]); // Exception is thrown here
as the plugins in the example are configured in the me.initComponent() call
the loop with the constructPlugin comes too early.
The exception is thrown in initPlugin as there is no "init" method.

If this is not a bug, could someone give an example to fix this using i.e.
the new Component inheritance mechanism ?

We now use a workaround with an intermediate panel wrapping the grid.
Ugly but works.