Ext.util.KeyMap销毁方法

时间:2015-01-12 14:01:04

标签: extjs destroy

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

在init方法中接受事件订阅。有没有一种方法,当我离开页面执行map.destroy?问题是当我去一个页面发生订阅事件并按F8工作无处不在。如何使它只在这个页面上工作?

1 个答案:

答案 0 :(得分:0)

出现这种情况是因为您使用KeyMap定位Ext.getBody()。 即使target指向this,您之前也会添加Ext.getBody(),这意味着无论您在页面的哪个位置,KeyMap都可以正常工作。 所以你有两个选择: 1)将组件元素分配给目标。请注意,只有在组件元素中选择了某些内容时才会调用方法onKeyPress

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

2)如果您希望调用Ext.getBody()方法,请继续将其添加到onKeyPress,无论页面上是否有任何关注点。但是,如果仅在特定页面处于活动状态时才能工作,则应向onKeyPress方法添加条件。

示例:

onKeyPress : function() {
    currentTab = this.getActiveTab();
    if (currentTab.title=='Foo') {
        console.log('You hit F8');
    }
}

以下是演示过程的小提琴:https://fiddle.sencha.com/#fiddle/g7a