【问题标题】:Ext.util.KeyMap destroy methodExt.util.KeyMap 销毁方法
【发布时间】:2015-03-10 07:42:19
【问题描述】:
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 无处不在。如何使其仅在此页面上有效?

【问题讨论】:

    标签: extjs destroy


    【解决方案1】:

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

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

    2) 如果您想调用onKeyPress 方法,无论页面上是否有任何焦点,请继续将其添加到Ext.getBody()。但如果它必须仅在特定页面处于活动状态时才起作用,则应在 onKeyPress 方法中添加条件。

    例子:

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

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

    【讨论】:

    • 方法 getActiveTab() 不可用。不知道为什么。我需要使用 F8 仅针对此页面来显示一些对话框。
    • getActiveTab 仅存在于 TabPanel 类中,您需要根据需要调整示例。
    猜你喜欢
    • 2010-10-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-04-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多