Привязка событий нажатия к вкладке во внешнем JS

#javascript #extjs #tabs #extjs4 #tabpanel

#javascript #extjs #вкладки #extjs4 #панель вкладок

Вопрос:

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

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

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

Некоторые из них затем

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

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

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

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

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

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

Ответ №1:

Я поместил это на вкладку внутри панели вкладок в 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
});
  

Комментарии:

1. Вам следует посмотреть на свойство TabBar на панели вкладок в Ext4. Используйте индекс вкладки, чтобы найти ее из элементов панели вкладок, и прикрепите к ней обработчик нажатия.

2. В итоге я выяснил, что мне нужно выяснить; после добавления вкладки на панель вкладок это добавляет свойство к компоненту, который вы добавили в called tab, который представляет кнопку tab, поэтому я просто привязал к ней onmousedown, и все отлично.

3. @Sir mXe: мне хотелось сделать что-то похожее на urs, но я действительно не мог понять, что вы сделали, боюсь, новичок в extjs, не могли бы вы, пожалуйста, объяснить подробнее, пример тоже приветствовался бы, заранее спасибо

4. @astrocybernaute Я не думаю, что вы нашли ответ, не так ли?

Ответ №2:

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

Комментарии:

1. Проблема в том, что beforetabchange и tabchange не решают проблему интерпретации нажатий. Я собираюсь настроить привязку к событию щелчка и оттуда определить, нажата ли средняя кнопка мыши. Я обязательно обновлю первоначальный вопрос; спасибо за предложение, хотя: D