Thomas
Thomas

Reputation: 6710

Accessing Ext Component Config

I have a very simple extension in Ext JS from Ext.form.Panel:

Ext.define('path.to.SomeClass', {  
    extend : 'Ext.form.panel',  
    xtype : 'some-class'  

    config : {  
        hasDog : true  
    },

    constructor : function (config) {
        if (this.config.hasDog) {  
            // do something dog related
        } else {
            // do something not dog related
        }
    }
});

I then have a "container" for this custom componet:

Ext.define('path.to.OtherClass', {  
    extend : 'Ext.window.Window',  

    // ....

    items : [{
        xtype : 'some-class',
        hasDog : false
    }]
});

However, for some reason unknown to me, the if...else evaluation in SomeClass is always picking up the default configuration for hasDog. Am I not correctly configuring some-class in OtherClass's items config?

To add a bit more context, OtherClass is called via some using code:

var window = Ext.create('path.to.OtherClass');  
window.show();

From what I can see, the above is pretty standard stuff - at least in thought.

Upvotes: 0

Views: 134

Answers (1)

matt
matt

Reputation: 4047

The reason why you always get the default configuration is because you're accessing this.config, which is the declaration of your configuration, instead of the actual configuration from the constructor argument. So either use config or - once you've called the parent class constructor - this.

constructor : function (config) {
    // before parent class constructor or this.initConfig was called:
    console.log(config.hasDog);

    // call parent class constructor
    this.callParent(arguments);

    // after parent class constructor or this.initConfig was called:
    console.log(this.hasDog);
}

Also have a look at the documentation:

Note: You need to make sure Ext.Base.initConfig is called from your constructor if you are defining your own class or singleton, unless you are extending a Component. Otherwise the generated getter and setter methods will not be initialized.

In your case, since your extending a component, calling the parent constructor should suffice (as shown in the example above).

Upvotes: 2

Related Questions