【发布时间】:2017-11-09 12:58:16
【问题描述】:
问题可能很简单,但我找不到正确的答案。
我有一个只有四个按钮的面板。只是带有按钮的 vbox。现在我想选择并按下这个按钮,不仅可以通过鼠标单击,还可以通过键盘。所以我使用了 Ext.KeyMap 并抓住了我想要的每一个键:ENTER、TAB、DOWN 和 UP。但是我找不到在此按钮之间移动焦点的简单方法。
例如我专注于第一个按钮,按向下键,我想专注于第二个按钮。没门。我试过了
but1.down('button[action=next]').focus(false, 100))
但它不能工作。请善待提示。
好吧,我能说什么,非常感谢你——它显然有效。
我不知道要使用 KeyNav。 但它在这样一个简单的例子中工作我的情况有点复杂,我问这个问题只是简化了我的情况。所以这个菜单是我应用程序中的第二个屏幕,它的构造方式如下:
PANEL
Panel1
Label1
Button 1
Button 2
Button 3
Panel2
Label2
Button 4
Button 5
Panel3
Label3
Button 6
Button 7
Button 8
并且每个用户都可以看到(面板在开始时隐藏)并使用此结构的一部分(例如 Panel1、3 和 Button 8)。我在前一步(登录步骤)决定了它,我只在定义的容器中为他显示用户菜单:
Ext.define('Gromel.view.Menu', {
extend: 'Ext.container.Container',
requires:[
'Ext.tab.Panel',
'Ext.layout.container.Border',
'Ext.form.Label',
'Ext.form.Panel'
],
xtype: 'app-menu',
fullscreen: true,
layout: 'fit',
...
我将您的代码放在 PANEL 级别,它几乎可以正常工作。我对上述项目使用以下默认定义:
defaults: {
margin: '0 0 10 0',
baseCls: 'x-btn-default-large',
cls: 'cap-btn',
style: 'font-size:18px;text-align: center',
height: 40,
width: '50%',
// yours:
handler: function () {
this.up('panel').activeButton = this.activeIndex;
}
}
所以我将您的 cls 更改方法修改为:
button[method]('x-focus x-btn-focus x-btn-default-large-focus')
并且您的程序正在运行。
我现在无法解决的问题是:
- 正如您在与按钮相同的级别上看到的,我有标签,但我不知道如何绕过它们;
-
更重要的是 - 我只想在菜单面板上运行此过程,而不是在登录面板和其余部分(在我的结构中更深),但这是全局的,所以如果我在登录面板上按 ENTER,我会看到下一个菜单的效果控制板;我用以下方式替换了 ENTER 效果(我想在菜单中的每个按钮上按 ENTER 并运行不同的按下事件):
case e.ENTER: butt.fireEvent('click', butt);休息;
所以如果对你来说不是很多,请多多指教。
【问题讨论】: