访问Ext组件配置

时间:2015-05-11 14:23:31

标签: javascript extjs

我在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

从我所看到的情况来看,上述内容非常标准 - 至少在思考中。

1 个答案:

答案 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方法将不会被初始化。

在您的情况下,由于您扩展了一个组件,因此调用父构造函数就足够了(如上例所示)。