1

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

4

2 回答 2

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);
    }
});
于 2012-07-17T18:21:06.167 回答
2

标准实例覆盖


  • 通常,我们会使用Ext.override()afterExt.create()将覆盖应用到类的特定实例(请参阅文档):

    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


  • 由于该initComponent方法在执行期间Ext.create()被调用,我们必须在Ext.create. 为了访问原始方法,我们必须使用一种变通方法来访问被覆盖的方法:

    var myObj = Ext.create('Ext.some.Component', {
        initComponent: function() {
            // Do something.
    
            // Get a reference to the class.
            var myClass = Ext.getClass(this);
    
            // Apply the overridden method from the class' prototype.
            myClass.prototype.initComponent.apply(this, arguments);
    
            // Do something else.
        }
    });
    
于 2012-07-17T22:45:09.553 回答