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工作无处不在。如何使它只在这个页面上工作?
答案 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