Javascript 访问Ext组件配置
我从Javascript 访问Ext组件配置,javascript,extjs,Javascript,Extjs,我从Ext.form.Panel在ExtJS中有一个非常简单的扩展: Ext.define('path.to.SomeClass', { extend : 'Ext.form.panel', xtype : 'some-class' config : { hasDog : true }, constructor : function (config) { if (this.config.hasDog)
Ext.form.Panel
在ExtJS中有一个非常简单的扩展:
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
}]
});
但是,由于我不知道的原因,SomeClass
中的if…else
计算总是选择hasDog
的默认配置。在OtherClass
的项配置中,我是否没有正确配置某些类
要添加更多的上下文,将通过一些使用代码调用OtherClass
:
var window = Ext.create('path.to.OtherClass');
window.show();
从我所看到的,以上是相当标准的东西-至少在思想上是这样。您总是获得默认配置的原因是因为您正在访问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);
}
还可以查看以下内容:
注意:如果要定义自己的类或单例,则需要确保从构造函数调用,除非要扩展组件。否则,生成的getter和setter方法将不会初始化
在您的情况下,由于您扩展了一个组件,因此调用父构造函数就足够了(如上面的示例所示)。Matt,谢谢,在尝试调用initConfig
并看到控制台上记录了一个错误后,我在文档中看到了这一点。回答得很好,谢谢。