Model view controller ExtJS 4如何在使用MVC时为窗口正确创建键映射

Model view controller ExtJS 4如何在使用MVC时为窗口正确创建键映射,model-view-controller,extjs,keymapping,Model View Controller,Extjs,Keymapping,我有一个简单的ExtJS应用程序,它是用MVC风格编写的(我的大部分信息来自于) 我的应用程序创建了一个视口,并且有一个带有表单、一些字段和按钮的视图 应用程序有一个具有“loginButtonClick”功能的控制器,控制器通过以下命令监视单击事件: this.control({ 'loginwindow button[action=save]': { click: this.loginButtonClick } } 这很好,但是现在当登录窗口显示时,我希望enter键也执行log

我有一个简单的ExtJS应用程序,它是用MVC风格编写的(我的大部分信息来自于)

我的应用程序创建了一个视口,并且有一个带有表单、一些字段和按钮的视图

应用程序有一个具有“loginButtonClick”功能的控制器,控制器通过以下命令监视单击事件:

this.control({
 'loginwindow button[action=save]': {
   click: this.loginButtonClick
 }
}
这很好,但是现在当登录窗口显示时,我希望enter键也执行loginButtonClick方法

我已经尝试了各种方法,但我面临的基本问题是如何放置用于创建keymap的代码,以及如何将其绑定到适当的实例

例如,如果我在控制器中创建keymap(这是我的首选项),我需要获取该控制器的特定视图实例(我可能会打开多个相同类型的窗口)


那么,如何从控制器中为其视图(窗口)创建一个键映射(或?),并调用本地方法(this.loginButtonClick)当按下enter键时?

您可以在窗口渲染事件上设置所有这些内容。因此,在渲染事件时,您可以为enter键添加一个eventlistener,并在通过编程调用的处理程序中单击登录按钮。

您可以通过将以下侦听器添加到表单中的文本/密码字段来实现这一点

listeners: {
    specialkey: function(field, e){
        if (e.getKey() == e.ENTER) {
            var form = this.up('form').getForm();
            submitLoginForm(form);
        }
    }
}
这里的“form”是您的表单,“submitLoginForm”是在表单提交时调用的函数,我猜在您的例子中是loginButtonClick


希望这能有所帮助。

您能做的是在Render事件后将初始化keyMap的代码绑定到登录窗口,如下所示:

this.control{(
   'loginwindow' : {
      afterrender: this.initializeKeyMap
 }
然后制作一个设置keyNav的功能:

initializeKeyMap: function(window, options) {
   this.keyNav = Ext.create('Ext.util.KeyNav', window.el, {
         enter: this.loginButtonClick,
         scope: this
   });           
}
现在,当用户按Enter键加载对话框时,它应该执行您的函数