使用ExtJS4将键事件侦听器添加到以编程方式生成的MessageBox
我正在构建一个ExtJS4Web应用程序,其中有一个部分,我向用户显示一个确认对话框,以确认用户是否希望执行该操作。我使用编程生成的MessageBox询问用户,用户可以单击Yes或No 这是我的密码:使用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: '
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事件。按预期工作。非常感谢。