Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/extjs/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
使用ExtJS4将键事件侦听器添加到以编程方式生成的MessageBox_Extjs_Extjs4_Extjs4.2 - Fatal编程技术网

使用ExtJS4将键事件侦听器添加到以编程方式生成的MessageBox

使用ExtJS4将键事件侦听器添加到以编程方式生成的MessageBox,extjs,extjs4,extjs4.2,Extjs,Extjs4,Extjs4.2,我正在构建一个ExtJS4Web应用程序,其中有一个部分,我向用户显示一个确认对话框,以确认用户是否希望执行该操作。我使用编程生成的MessageBox询问用户,用户可以单击Yes或No 这是我的密码: Ext.MessageBox.show({ title: alertHeader, msg: alertMessage, buttons: Ext.MessageBox.YESNO, icon: Ext.MessageBox.WARNING, cls: '

我正在构建一个ExtJS4Web应用程序,其中有一个部分,我向用户显示一个确认对话框,以确认用户是否希望执行该操作。我使用编程生成的MessageBox询问用户,用户可以单击Yes或No

这是我的密码:

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,文档也没有什么帮助。

检查(以及键常量),我们还必须将焦点设置在窗口上,以侦听其上的keyup事件

我创建了一个简单的小提琴来说明它是如何工作的-

这不是一个完整的解决方案,但我想你们可以自己做。
作为一个简单的例子,您可以直接在按键上执行逻辑,然后将
myConfWindow
myConfWindow.down()
销毁到特定按钮并“单击”它。但我想您希望在应用程序中的多个位置使用此消息框,因此最好扩展
Ext.MessageWindow
并在其中添加keymap。

将此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
});
},

您可以通过
getKeyMap
获取MessageBox的密钥映射。在
afterrender
listener中向其添加新的密钥侦听器

var myMsg = Ext.create('Ext.window.MessageBox', {
    closeAction: 'destroy',
    listeners: {
        afterrender: function() {
            this.getKeyMap().on(Ext.event.Event.Y, function() {
                console.log("Yes");
            }, this);
            this.getKeyMap().on(Ext.event.Event.N, function() {
                console.log("No");
            }, this);
        }
    }
}).show({
    title: 'Custom MessageBox Instance',
    message: 'I can exist along with Ext.Msg'
});

您是否作为关键事件绑定到Y/N?因为空格/制表符+空格已经是现成的了。如果不是“是”和“否”的“是”和“否”,那就没有意义了。似乎我必须在事件键代码块中复制回调函数。但我不确定如何扩展MessageWindow事件。按预期工作。非常感谢。