Ext.window在父类的窗口关闭按钮上覆盖子类中的destroy

时间:2014-12-23 07:13:12

标签: javascript extjs

我的代码中有一个ext.window,它有默认的保存和关闭按钮。在关闭按钮单击我隐藏窗口:

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 个答案:

答案 0 :(得分:1)

您可以在窗口上定义closeAction

  

closeAction :String关闭标题工具时要执行的操作   点:

     

destroy:   从DOM中删除窗口并销毁它和所有后代   组件。该窗口无法通过显示重新显示   显示方法。

     

hide:   通过设置隐藏的可见性和应用否定来隐藏窗口   偏移。该窗口可以通过节目重新显示   方法。注意:此行为已更改!设置确实会影响收盘价   将调用approriate closeAction的方法。

     

Defaults to: 'destroy'

所以没有必要覆盖任何东西。

修改>>记得打电话给close()而不是hide()!

{ 
  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);
    }
});