我正在构建一个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,文档也没什么帮助。
答案 0 :(得分:2)
检查Ext.util.KeyMap(以及Ext.EventObject的关键常量),我们也必须将注意力集中在我们的窗口上以监听其上的键盘事件。
我创造了一个简单的小提琴来说明它是如何运作的 - Key map with message window。
它不是完整的解决方案,但我想你可以自己休息。
举个简单的例子,你可以直接在按键上做你的逻辑,并将myConfWindow
或myConfWindow.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