ExtJS, как переопределить имена кнопок и обработчики родительского класса из дочернего класса

У меня есть родительский класс и дочерний класс, как указано ниже.

Ext.ns("MyUi");
MyUi.ParentPanel = Ext.extend(Ext.form.FormPanel, {
initComponent: function() {
    MyUiPanel.superclass.initComponent.call(this);
},
id: 'card-id',
layout: 'card',
activeItem: 0,
buttonAlign: 'center',
buttons:[{
            text: "Next", 
            id: "card-next", 
            handler:  function(){
                Ext.getCmp('card-id').navigationHandler(1);
            }
        },{
            text: "Previous", 
            id: "card-prev", 
            handler: function(){
                Ext.getCmp('card-id').navigationHandler(-1);
            },
            disabled: true
        },{
            text: "Finish", 
            id: "finishButton", 
        }],
navigationHandler: function(increment){
         //code to switch cards/items
}});

var panel1 = ...
var panel2 = ...

childPanel = Ext.extend(MyUi.ParentPanel, {
    initComponent: function() {
        var items = [panel1, panel2];
        Ext.apply( this, {
            items: items
        });
        Cx.Ui.ProvisionRPoolWizardPanel.superclass.initComponent.apply(this);
    }

});

Я хочу, чтобы моя дочерняя панель переопределяла имена и обработчики кнопок родительской панели.

Например, вместо «Готово» я хочу, чтобы в дочерней панели было имя «Завершить», и я хочу иметь свой собственный обработчик.

И дочерняя панель должна иметь возможность переопределять код обработчика «Далее» родительской панели. Например, когда я нахожусь на панели 1, если я нажимаю «Далее», я хочу выполнить некоторые проверки, а затем я хочу вызвать функцию обработчика «Далее» родительской панели.


person jgg    schedule 03.11.2011    source источник


Ответы (1)


Почему бы просто не создать свои дочерние кнопки в initComponent, например:

childPanel = Ext.extend(MyUi.ParentPanel, {
    initComponent: function() {
        var items = [panel1, panel2];
        Ext.apply( this, {
            items: items
        });
        this.buttons = [{
            text: "Next", 
            id: "card-next", 
            handler:  function(){
               //your new handler here
            }
        },{
            text: "Previous", 
            id: "card-prev", 
            handler: function(){
                Ext.getCmp('card-id').navigationHandler(-1);
            },
            disabled: true
        },{
            text: "Complete", 
            id: "finishButton", 
        }];
        Cx.Ui.ProvisionRPoolWizardPanel.superclass.initComponent.apply(this);
});
person Pavel Podlipensky    schedule 03.11.2011