Привязка событий щелчка к вкладке в Ext JS

Алоха еще раз, ТАК.

Я занят работой над проектом, который почти полностью состоит из ExtJS для работы с интерфейсом. Я использую версию 4.0.0, предполагая, что это необходимо знать. У меня есть код следующего содержания:

panel = Ext.create("Ext.panel.Panel",{
        //initializing stuffs
})

Несколько таких тогда

 tabs = Ext.create("Ext.tab.Panel", {
        //initialize config
        items: [
               //the panels
        ]
  })

Теперь моя большая проблема заключается в том, что мне нужно иметь возможность привязать событие к фактическим вкладкам. Я знаю, что могу привязывать события к панели вкладок и панели вкладок, но мне нужно фактически привязать событие щелчка к одной из вкладок на панели. Я пробовал что-то вроде этого:

panel = Ext.create("Ext.panel.Panel", {
        //initializing stuffs
        listeners: {
                 click: {
                        fn: function() {
                            console.log("in click listener for panel")
                        }
                  }
         }
 })

Однако проблема в том, что, насколько я могу судить, это привязывается к самой панели, а не к вкладке на панели вкладок. Интересно отметить, что на самом деле он даже не привязан к фактической панели, что касается функциональности, потому что я никогда не вижу эту информацию журнала консоли.

В любом случае, кто-нибудь из вас, случайно, не знает, как привязывать события непосредственно к вкладкам? Или даже как получить доступ к вкладкам напрямую? Я просматривал документацию по ExtJS API, но до сих пор ничего не могу найти, поэтому было бы здорово, если бы кто-нибудь здесь мог помочь! :D

Просто чтобы было понятно, я не пытаюсь подключиться к смене вкладок. Я пытаюсь подключиться к фактическому событию щелчка по вкладке, потому что я собираюсь проверить, нажата ли средняя кнопка мыши, чтобы я мог закрыть вкладку, если это так.


person ozzmotik    schedule 16.05.2011    source источник


Ответы (2)


Я поместил это на вкладку внутри панели вкладок в ExtJS 3. Что-то подобное должно работать в 4.

listeners: {
    activate: function() {
        var me = this;
        Ext.fly(this.ownerCt.getTabEl(this)).on({
            click: function() {
                me.loadProducts();
            }
        });
    },
    single: true
},

loadProducts: function() {
    this.load({
    url: 'products.jsp',
    params: {
        caseID: window.caseID
    },
    scripts: true
});
person Blacktiger    schedule 17.05.2011
comment
Вы должны посмотреть на свойство tabBar на панели вкладок в Ext4. Используйте индекс вкладки, чтобы найти ее среди элементов tabBar и прикрепить к ней обработчик кликов. - person Blacktiger; 18.05.2011
comment
Я закончил тем, что узнал то, что мне нужно было узнать; после того, как вы добавите вкладку на панель вкладок, она добавит свойство к компоненту, который вы добавили в названную вкладку, которая представляет кнопку вкладки, поэтому я просто привязал к ней onmousedown, и все отлично. - person ozzmotik; 18.05.2011
comment
@Sir mXe: я заинтересован в том, чтобы сделать что-то похожее на urs, но я действительно не мог понять, что вы сделали, новичок в extjs, я боюсь, не могли бы вы объяснить подробнее, пример тоже приветствуется, заранее спасибо - person Armance; 27.07.2011
comment
@astrocybernaute Не думаю, что ты нашел ответ, не так ли? - person ozzmotik; 24.01.2012

Вы можете добавить слушателей на TabPanel сама слушаю beforetabchange и/или tabchange

person Amol Katdare    schedule 16.05.2011
comment
Проблема в том, что beforetabchange и tabchange не решают проблему интерпретации кликов. Я собираюсь настроить его так, чтобы он привязывался к событию щелчка и оттуда определял, нажата ли средняя кнопка мыши. Я обязательно обновлю первоначальный вопрос; хотя спасибо за предложение :D - person ozzmotik; 17.05.2011