2

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

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

该应用程序有一个带有“loginButtonClick”功能的控制器,控制器通过以下方式监视点击事件:

this.control({
 'loginwindow button[action=save]': {
   click: this.loginButtonClick
 }
}

这很好用,但是现在显示登录窗口时,我希望输入键也执行 loginButtonClick 方法。

我已经尝试了各种各样的事情,但我遇到的基本问题是在哪里放置用于创建键盘映射的代码,以及如何将它绑定到正确的实例。

例如,如果我在控制器中创建键盘映射(这是我的偏好),我需要获取该控制器的特定视图实例(我可能会打开多个相同类型的窗口)。

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

4

3 回答 3

2

您可以做的是将初始化 keyMap 的代码绑定到登录窗口 afterrender 事件,如下所示:

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 键,则加载对话框时,它应该执行您的功能。

于 2013-02-12T19:59:58.193 回答
0

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

listeners: {
    specialkey: function(field, e){
        if (e.getKey() == e.ENTER) {
            var form = this.up('form').getForm();
            submitLoginForm(form);
        }
    }
}

这里'form'是你的表单,'submitLoginForm'是表单提交时调用的函数,我猜你的情况是 loginButtonClick。

希望这可以帮助。

于 2011-12-14T13:15:26.420 回答
0

您可以在窗口渲染事件中设置所有这些内容。因此,当它呈现时,您为 enter 键添加一个事件侦听器,并在您以编程方式调用的处理程序中单击登录按钮。

于 2011-11-24T14:29:22.987 回答