Хорошо, вот как мне удалось обойти это.
Во-первых, я определил вкладку с ее вкладкой и следующим образом:
[...]
activeTab : 0,
xtype : 'tabpanel',
id : 'tabPanel',
alias : 'widget.mainpanels',
tabBar: {
id: 'tabPanelTabBar',
listeners: {
afterrender: function(tb, eOpts) {
this.bindDetailsPanelKeys(tb);
},
scope: this
}},[...]
Для каждого элемента вкладки я добавил атрибут «индекс», так как я не нашел бы другого способа получить
текущая числовая позиция вкладки. Вот пример:
{
xtype : 'categoryEdit',
title : 'Detalles Categoría',
index: 1
}
А обязательная функция работает следующим образом. Как предложил Saket Patel , я даю конструктору KeyMap ссылку на элемент 'el' панели вкладок (обратите внимание, что это 'el' TabBar, not 'el' TabPanel) .
bindDetailsPanelKeys: function(tabBar) {
var tbRightMap = new Ext.util.KeyMap(tabBar.getEl(), { //RIGHT ARROW
key: Ext.EventObject.RIGHT,
fn: function(e) {
var totalItems = tabBar.items.length, //total tabs
activeTabIndex = tabBar.tabPanel.getActiveTab().index, //current tab index
nextTabIndex = (activeTabIndex % totalItems) + Math.ceil(activeTabIndex/totalItems) - 1; //Calculate next index
tabBar.tabPanel.setActiveTab(nextTabIndex);
}
});
var tbLeftMap = new Ext.util.KeyMap(tabBar.getEl(), { //LEFT ARROW
key: Ext.EventObject.LEFT,
fn: function(e) {
var totalItems = tabBar.items.length,
activeTabIndex = tabBar.tabPanel.getActiveTab().index;
prevTabIndex = (activeTabIndex == 1) ? 3 : activeTabIndex - 2;
tabBar.tabPanel.setActiveTab(prevTabIndex);
}
});
Надеюсь, кто-нибудь найдет это полезным.