Reputation: 6710
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
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