我在Ext.form.Panel
的Ext JS中有一个非常简单的扩展:
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
}
}
});
然后我为这个自定义组件设置了一个“容器”:
Ext.define('path.to.OtherClass', {
extend : 'Ext.window.Window',
// ....
items : [{
xtype : 'some-class',
hasDog : false
}]
});
但是,由于某些我不了解的原因,if...else
中的SomeClass
评估始终会提取hasDog
的默认配置。我在some-class
的{{1}}配置中未正确配置OtherClass
吗?
要添加更多上下文,可以通过一些使用代码来调用items
:
OtherClass
从我所看到的情况来看,上述内容非常标准 - 至少在思考中。
答案 0 :(得分:2)
您始终获得默认配置的原因是您正在访问this.config
,这是您的配置声明,而不是构造函数参数的实际配置。因此,使用config
或 - 一旦调用父类构造函数 - 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);
}
另请查看documentation:
注意:如果您要定义自己的类或单例,则需要确保从构造函数中调用Ext.Base.initConfig,除非您正在扩展Component。否则,生成的getter和setter方法将不会被初始化。
在您的情况下,由于您扩展了一个组件,因此调用父构造函数就足够了(如上例所示)。