как вызвать суперкласс в ext js 3.4 внутри переменной

Кто-нибудь знает, как можно успешно вызвать суперкласс в ext js 3.4? В моем примере кода я не могу заставить суперкласс работать на панели.

MyWindow = Ext.extend(MyWindowUi, {
    initComponent: function() {
        MyWindow.superclass.initComponent.call(this);
        this.createTextField();
    },  
    createTextField : function() {  
        var p = new Ext.Panel({
            title: 'somepanel',
            initComponent: function() {
                console.log('init component');
                console.log(this);
                this.superclass.initComponent.call(this); //NOT WORKING??
            }
        });
        this.add(p);
    }
});

person chriscrossweb    schedule 19.02.2013    source источник


Ответы (2)


Вместо этого попробуйте Ext.Panel.superclass.initComponent.call(this).

person tuespetre    schedule 19.02.2013
comment
Я пытался использовать суперкласс, но это не отображало панель. Ext.Panel.prototype.initComponent.call(this); работал на меня. - person chriscrossweb; 25.03.2013

Это не работает, потому что вы не вызываете initComponent Ext.Panel при создании p. Если вы собираетесь переопределить метод с помощью вызова суперкласса предыдущего метода, Ext.extend будет чище, если не нужны трюки с областью действия.

Вы также можете сделать что-то вроде:

   createTextField : function() {  
    var p = new Ext.Panel({
        title: 'somepanel'
    }),
    oldInit = p.initComponent;

    p.initComponent = function() {
        console.log('init component');
        console.log(this);
        oldInit.call(this);
    }

    this.add(p);
}

Или что-то вроде:

createTextField : function() {  
    var p = new Ext.Panel({
        title: 'somepanel',
        initComponent: function() {
            console.log('init component');
            console.log(this);
            Ext.Panel.prototype.initComponent.call(this);
        }
    });
    this.add(p);
}

Но они оба некрасивые имхо.

person pllee    schedule 19.02.2013
comment
Спасибо! супер, вариант: Ext.Panel.prototype.initComponent.call(это); прекрасно работает! - person chriscrossweb; 25.03.2013