Поведение autoDestroy: false в Extjs4

Как на самом деле работает autoDestroy:false в Ext-Js 4. Я собираюсь закрыть вкладку, а затем воссоздать ее нажатием кнопки. См. код здесь:

    <html>
    <head>
     <link rel="stylesheet" type="text/css" href="../resources/css/ext-all.css" />
     <script type="text/javascript" src="../bootstrap.js"></script>
     <script type="text/javascript">Ext.require('Ext.tab.*');

    Ext.onReady(function(){

var tabs = Ext.create('Ext.tab.Panel', {
    width: 400,
    height: 400,
    renderTo: document.body,
    autoDestroy: false,
    items: [{
        title: 'Home',
        html: 'Home',
        itemId: 'home'

    }, {
        title: 'Tickets',
        html: 'Tickets',
        itemId: 'tickets',
        closable: true,
        closeAction: 'hide'
    }]
});

Ext.create('Ext.button.Button',{
    id: 'buttonId',
    text: 'Recreate Tab',
    renderTo: Ext.getBody(),
    handler: function(){
        var tickets = tabs.child('#tickets');
        tickets.tab.show();

    }
});

  });

</script>
 </head>
  <body>
  <div id="tabs1">
     <div id="script" class="x-hide-display"></div>
     <div id="markup" class="x-hide-display"></div>
 </div>
</body>
</html>

Но это дает Uncaught TypeError: Невозможно прочитать вкладку свойства null при нажатии кнопки. Почему ?


person user1227794    schedule 23.02.2012    source источник


Ответы (1)


После закрытия вкладка тикетов удаляется с панели вкладок. Таким образом, когда вы ищете его с помощью tabs.child('#tickets'), вы получаете нуль. В следующей строке вы фактически вызываете null.tab, отсюда и ошибка. Вам нужно будет следить за панелью до того, как она закроется, а затем использовать tabs.add, чтобы вернуть ее обратно.

person David Kanarek    schedule 23.02.2012
comment
Не понял, что имеется в виду. Вам нужно будет следить за панелью, прежде чем она закроется, а затем использовать tabs.add, чтобы вернуть ее. Разве цель autoDestroy: false не уничтожить экземпляр вкладки, а просто скрыть его. - person user1227794; 23.02.2012
comment
Он не уничтожается, но удаляется с панели вкладок. Вы можете попробовать tabs.child... сразу после того, как Ext.create сделаете это, а затем добавить эту переменную на вкладки в обработчике или просто tabs.add конфигурацию, которую вы использовали для ее первоначального создания. - person David Kanarek; 23.02.2012
comment
Не могли бы вы уточнить, как отслеживать панель до ее закрытия, а затем использовать tabs.add, чтобы вернуть ее. Пожалуйста? - person user1477388; 14.02.2014
comment
Назначьте его переменной, используя var tab = tabs.child('#tickets') или что-то подобное. Затем tabs.add(tab), чтобы добавить его обратно. - person David Kanarek; 18.02.2014