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
并看到控制台上记录了一个错误后,我在文档中看到了这一点。回答得很好,谢谢。