2012-02-23 2 views
1

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

<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» при нажатии кнопки. Зачем ?

ответ

1

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

+0

Не получил того, что подразумевается под «вам нужно будет отслеживать панель перед ее закрытием, а затем использовать tabs.add, чтобы вернуть ее». Не является целью autoDestroy: false - не уничтожить экземпляр вкладки, а просто скрыть ее. – user1227794

+0

Не уничтожается, но удаляется с панели вкладок. Вы можете попробовать 'tabs.child ...' сразу после того, как вы внесете его 'Ext.create', а затем добавьте эту переменную в вкладки в обработчике или просто 'tabs.add' конфигурацию, которую вы использовали для ее первоначального создания. –

+0

Не могли бы вы рассказать о том, как «отслеживать панель перед ее закрытием, а затем использовать tabs.add, чтобы вернуть ее». Пожалуйста? – user1477388

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