2014-12-29 2 views
0

Если мы закрываем tabPanel с использованием closable: true, действие по умолчанию будет уничтожать tabPanel. Итак, поскольку tabPanel уничтожен, мы не сможем снова отображать tabPanel. Но я не хочу, чтобы tabPanel быть разрушен, он должен быть скрыт, так что я попробовал этотExtJS3: Не удается прочитать свойство «parentNode» undefined

this.Manage = new Ext.TabPanel({ 
      title: 'Manage', 
      closable: true, 
      closeAction: 'hide', 
      activeTab: 0, 
      items:[ 
       this.manageGridPanel 

       ] 
    }); 

Что происходит с этим, я могу отобразить tabPanel но дочерние элементы внутри, не будучи отображается. И я получаю следующее исключение в js console Uncaught TypeError: Cannot read property 'parentNode' of undefined Также из-за этого я не могу перейти к другим вкладкам из моего дерева, я получаю следующее исключение в консоли js Uncaught TypeError: Cannot read property 'className' of undefined.

Может ли кто-нибудь связаться со мной Как я могу это решить?

+0

Можете ли вы воспроизвести его на скрипке? – Krzysztof

ответ

-1

Не думаю, closeAction предназначено для использования.

Вы можете вместо этого использовать событие beforeclose, скрыть tabpanel в прослушивателе и вернуть false, чтобы отключить событие закрытия.

+0

'closeAction: свойство' hide'' работает в случае 'window', я искал что-то похожее для' tabpanel' – user777777

2

В то время как Pieter B не является правильным в отношении closeAction, он прав насчет своей рекомендации по использованию мероприятия beforeclose!

Во-первых, давайте посмотрим на реализацию cloaseAction собственности в Ext.Window класса, которые выглядят так:

this[this.closeAction](); 

и используется в нескольких методов обратного вызова события.

Важно это:

Tab События

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

  • активировать: Пожары, когда этот компонент становится активной вкладки.
  • deactivate: Выполняется, когда компонент, который был активной вкладкой, деактивируется.
  • beforeclose: Пожары, когда пользователь нажимает на инструмент закрытия закрываемой вкладки. Может быть наложено вето, возвращая false из обработчика.
  • закрыть: Пожар закрытой вкладки был закрыт пользователем.

Так в теории что-то вродеthis work:

new Ext.TabPanel({ 
    title: 'Manage', 
    renderTo: Ext.getBody(), 
    closable: true, 
    closeAction: 'hide', 
    defaults: { 
     listeners: { 
      'beforeclose': function(panel) { 
       // We should have the tab scope here 
       var closeAction = this.ownerCt.closeAction 
       if (closeAction === 'hide') { 
        panel.hide(); 
        Ext.get(panel.tabEl).setVisible(false); 
        return false; 
       } 
       return true; 
      } 
     } 
    }, 
    activeTab: 0, 
    items:[ 
     {xtype:'panel', title: 'Tab 1', id:'tab1', closable: true, html: 'Tab 1'}, 
     {xtype:'panel', title: 'Tab 2', id:'tab2', closable: true, html: 'Tab 2'} 
    ] 
}); 

Пожалуйста, обратите внимание, что это уже работает пропущено, но вы все еще нужно, чтобы исправить некоторые детали здесь. Например, вкладка el является только скрытой и останется на месте. Для окончательной версии вам необходимо либо удалить , либо установить их нулевое значение.

+0

Ну, ExtJS3 был давно;) Мне пришлось отредактировать свой ответ, чтобы наконец заставить его работать. Сценарий обновлен до – sra

+0

Спасибо :) Проверял вашу скрипку, но я все равно получаю ту же ошибку, хотя внес изменения. Должен ли я давать 'tab.setVisible (true)'? Это, как я открыть вкладку панели динамически, \t \t \t \t \t \t 'если (n.text == 'Управление') { that.hometabPanel.add (manage.Manage) .show(); } 'должен ли я вносить изменения здесь? – user777777

+0

Пожалуйста, проверьте это один раз: https://fiddle.sencha.com/#fiddle/fkj – user777777

Смежные вопросы