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