是否有类似initComponent的Ext.create方法?

时间:2012-07-17 06:45:38

标签: javascript extjs extjs4.1

当我使用 Ext.create(“....”)时,我想做一些初始化。该对象简单而小巧,我不想定义它,但它需要一些来自mixin的方法(在调用组件之前)...我该怎么做?

2 个答案:

答案 0 :(得分:2)

听起来你正在做的事情是:

Ext.create('Ext.panel.Panel', {
    prop1: value1,
    prop2: value2
});

如果是这种情况,您应该能够添加一个名为initComponent的属性,该属性可以执行您想要的操作。只需记住调用原始initComponent,以便正确构建所有内容:

Ext.create('Ext.panel.Panel', {
    prop1: value1,
    prop2: value2,
    initComponent: function () {
        this.doSomething();
        Ext.panel.Panel.prototype.initComponent.apply(this, arguments);
    }
});

答案 1 :(得分:2)

标准实例覆盖


  • 通常,我们会在Ext.override()之后使用Ext.create()将覆盖应用于某个类的特定实例(请参阅docs):

    var myObj = Ext.create('Ext.some.Component', {
        ...
    });
    
    Ext.override(myObj, {
        myMethod: function() {
            // Do something.
            this.callParent(arguments); // From Ext.some.Component class.
            // Do something else.
        }
    });
    
  • this.callParent(arguments)正常使用 进行覆盖

    • 明确地通过Ext.override()
    • 隐含地通过Ext.define()

特例:覆盖initComponent


  • 由于在{/ 1}}执行期间initComponent方法被称为,我们必须在Ext.create()内覆盖它。为了访问原始方法,我们必须使用变通方法来访问重写方法:

    Ext.create