Extjs Ext.util.KeyMap销毁方法

Extjs Ext.util.KeyMap销毁方法,extjs,destroy,Extjs,Destroy,在init中,方法接受事件的订阅。当我离开页面执行map.destroy时,是否有一种方法?问题是当我转到页面发生订阅事件时,按F8键在任何地方都有效。如何使其仅在该页面上起作用?发生这种行为是因为您使用KeyMap将Ext.getBody()作为目标。 尽管target指向this,但您在前面添加了它Ext.getBody(),这意味着无论您在页面上的哪个位置,键映射都会工作。 所以你有两个选择: 1) 将组件元素指定给目标。请注意,只有在组件元素中选择了某些内容时,才会调用方法onKeyPr

在init中,方法接受事件的订阅。当我离开页面执行map.destroy时,是否有一种方法?问题是当我转到页面发生订阅事件时,按F8键在任何地方都有效。如何使其仅在该页面上起作用?

发生这种行为是因为您使用KeyMap将
Ext.getBody()作为目标。
尽管
target
指向
this
,但您在前面添加了它
Ext.getBody()
,这意味着无论您在页面上的哪个位置,键映射都会工作。 所以你有两个选择: 1) 将组件元素指定给目标。请注意,只有在组件元素中选择了某些内容时,才会调用方法
onKeyPress

例如: 如果设置target:component.getEl(),则只有在面板内聚焦文本字段时按F8键,才会调用
onKeyPress
方法

2) 如果希望调用
onKeyPress
方法,则无论页面上是否有任何焦点,都要将其添加到
Ext.getBody()
。但是,如果它必须仅在特定页面处于活动状态时工作,则应该向
onKeyPress
方法添加条件

例如:

init: function(){
    this.callParent(arguments);
    map = new Ext.util.KeyMap(Ext.getBody(),{                
    key: Ext.EventObject.F8,
    scope: this,
    target:this,
    fn: this.onKeyPress
    });
}

下面是fiddle演示的过程:

方法getActiveTab()不可用。不知道为什么。我需要使用F8只针对这个页面来显示一些对话框。getActiveTab只存在于TabPanel类中,您需要根据需要调整示例。
onKeyPress : function() {
    currentTab = this.getActiveTab();
    if (currentTab.title=='Foo') {
        console.log('You hit F8');
    }
}