2014-12-23 3 views
1

У меня есть код ext.window в моем коде, который имеет кнопку сохранения и закрытия по умолчанию. При закрытой кнопке нажмите я скрываю окно:Ext.window override уничтожить в дочернем классе по закрывающей кнопке окна в родительском классе

Ext.define('MyPack.template.TemplateWindow', { 
extend : 'Ext.Window', 

id: 'templateEditorWindow', 
closeAction: 'hide', 
autoScroll: false, 

createTemplateEditor : function() { 
// some code 
}, 

initComponent : function() { 

this.createTemplateEditor(); 

Ext.applyIf(this, { 
    layout  : 'border', 
    modal  : true 
}); 

this.items = [ this.templateEditor ]; 
this.buttons = [ 
    { text  : '#{msgs.button_save}', 
     window : this, 
     handler : function() { 
     if(this.window.templateEditor.save()) { 
      this.window.hide(); 
     } 
     } 
    }, 
    { text  : '#{msgs.button_close}', 
     cls : 'secondaryBtn', 
     window : this, 
     handler : function(){ 
     this.window.hide(); 
     } 
    } 
]; 

this.callParent(arguments); 
}, 

}); 

У меня есть еще одно окно, которое простирается над окном.

Ext.define('MyPack.template.RestfulTemplateWindow', { 
    extend : 'MyPack.template.TemplateWindow', 

    createTemplateEditor : function() { 
     // some code 
    } 
}); 

Я создаю этот класс детей. Окно создается правильно. Но я хочу переопределить функцию обработчика кнопки закрытия. На закрытии он должен уничтожить.

Как я могу переопределить его?

ответ

1

Вы можете определить closeAction на окне

closeAction: String делать, когда близкий инструмент заголовка щелкнул:

destroy: удалить окно из DOM и уничтожить его и всех потомков Компоненты. Окно не будет доступно для повторного отображения с помощью метода show .

hide: скрыть окно, установив видимость на скрытый и применив отрицательный смещения. Окно будет доступно для повторного отображения с помощью метода show . Примечание. Это поведение изменилось! настройка влияет на метод закрытия , который будет ссылаться на apororiate closeAction.

Defaults to: 'destroy'

Таким образом, нет никакой необходимости переопределять ничего.

Редактировать >> Не забудьте вызвать close() не скрывать()!

{ 
    text  : '#{msgs.button_save}', 
    window : this, 
    handler : function() { 
    if(this.window.templateEditor.save()) { 
     this.window.close(); // call close! 
    } 
    } 
}, 
{ text  : '#{msgs.button_close}', 
    cls : 'secondaryBtn', 
    window : this, 
    handler : function(){ 
    this.window.close(); // call close! 
    } 
} 

Редактировать

Отказ от ответственности: следующий способ это просто обходной

Ext.define('MyPack.template.RestfulTemplateWindow', { 
    extend : 'MyPack.template.TemplateWindow', 
    closeAction: 'destroy', // redefine th close action 
    initComponent: function() { 
     // all values set would be overrided by the parent 
     this.callParent(arguments); 
     // identify the buttons somehow 
     this.on('beforehide',function(w){w.close();return false;},this); 
    } 
}); 
+0

Я определил closeAction на дочернем окне. Но все же он не разрушен. Родительский класс скрывается от closeAction. Как я могу переопределить это? Я не могу изменить код родительского класса. –

+0

@ CODEFISH, какую версию ExtJS вы используете? – sra

+0

@CODEFISH Вы вызываете 'hide()' в свой демо-код! Не забудьте изменить это на 'close()'! – sra

Смежные вопросы