使用ExtJS4向使用编程生成的MessageBox添加键事件侦听器

时间:2016-01-12 04:12:41

标签: extjs extjs4 extjs4.2

我正在构建一个ExtJS4 Web应用程序,在那里我向用户显示一个确认对话框,以确认用户是否想要完成该操作。我使用以编程方式生成的MessageBox来询问用户,用户可以单击是或否。

这是我的代码:

Ext.MessageBox.show({
    title: alertHeader,
    msg: alertMessage,
    buttons: Ext.MessageBox.YESNO,
    icon: Ext.MessageBox.WARNING,
    cls: 'msgbox',
    fn: function(btn){
        //if user clicks yes, ask for override button
        console.log('btn value = ' + btn);
        if(btn ==='yes'){
        //more code here
        }
});

这可以按预期工作,程序会根据用户选择(是或否)执行适当的操作。但是,我想添加一些功能,用户只需在键盘上按Y或N键,程序仍然可以执行,就像在对话框中实际按下了是或否一样。

但是,我不知道如何将一个KeyEvent侦听器添加到MessageBox,文档也没什么帮助。

3 个答案:

答案 0 :(得分:2)

检查Ext.util.KeyMap(以及Ext.EventObject的关键常量),我们也必须将注意力集中在我们的窗口上以监听其上的键盘事件。

我创造了一个简单的小提琴来说明它是如何运作的 - Key map with message window

它不是完整的解决方案,但我想你可以自己休息。 举个简单的例子,你可以直接在按键上做你的逻辑,并将myConfWindowmyConfWindow.down()销毁到某个按钮,然后点击"它。但我想您希望在应用中的多个位置使用此消息框,因此最好扩展Ext.MessageWindow并在其中添加键映射。

答案 1 :(得分:0)

将此getKeyMapForKeyPressSubmit()方法附加到消息框

'afterrender' : function() {
   var map = this.getKeyMapForKeyPressSubmit();
}

和方法

getKeyMapForKeyPressSubmit : function (target, scope) {
var me = this;
return new Ext.util.KeyMap({
    target : target,
    binding : [{
            key : 89, //Key for Y button - Ext.EventObject.Y
            fn : function (key, e) {
                //your logic for Yes button
            }
        }, {
            key : 78, //Key for N button - Ext.EventObject.N
            fn : function (key, e) {
                //your logic for NO button
            }
        }
    ],
    scope : scope
});
},

答案 2 :(得分:0)

您可以通过COALESCE(StDev(StdDev),Max(StdDev)) as StdDev 获取MessageBox的关键地图。在getKeyMap侦听器中向其添加新的键侦听器。

afterrender