2010-03-08 2 views
1

У меня есть setup, где ожидается, что вкладка будет загружена на основе выбора пользователем элемента из дерева левой панели. Моя цель - загрузить только соответствующие элементы в соответствии с выбором пользователя на конкретную вкладку.ExtJs добавить панель в качестве вкладки

В первый раз, я могу добавить элемент, как показано ниже:

var tab = tabs1.getItem('Orders'); 
    tab.remove(0); 
    tab.add(pane33); 
    tab.doLayout(); 

Но, когда пользователь выбирает пункт снова, элемент панели уже удален, а ошибки, как (c.getPositionEl().dom is undefined).

Ошибка связана с удалением или уничтожением предмета. Кажется, нет возможности заменить элемент вкладки или обновить/перезагрузить панели.

Как с этим справиться?

Спасибо.

ответ

2

Container.remove имеет необязательный второй аргумент autoDestroy, что означает, что компонент удаляется также разрушен навсегда (для TabPanels, по умолчанию к истинной). Вы только создаете экземпляр своих дочерних компонентов один раз, поэтому после их уничтожения они больше не доступны для добавления. Либо передайте autoDestroy: false (это также можно установить на уровне TabPanel) и скрыть существующие компоненты после их удаления (затем просто показать их при последующих кликах), или вам придется повторно установить их перед добавлением каждый раз.

+0

Вы предлагаете закрыть, но проблема остается. Потому что, когда мне нужно показывать только конкретную панель в любой момент времени, а tab.hide() скрывает все панели, но я не могу найти способ показывать только выбранные панели или сетки. Например, tab.show (ProductTypesEditorGrid); показывает все скрытые панели. – Natkeeran

+0

Вы можете напрямую отображать/скрывать компоненты, например editorGrid.show(), если у вас есть ссылка, или Ext.getCmp ('component-id'). Show() –

+0

@bmoeskau, можете ли вы помочь с этим? Я не могу заставить Ext.id() работать. Мне также не удалось заставить autoDestroy работать, когда я удаляю вещи. Я где-то читал, что мне, возможно, придется поменять макет на нечто иное, чем на границе, так как добавление компонентов дважды не допускается с помощью макета границы. http://stackoverflow.com/questions/18630245/extjs-4-replace-two-components-in-viewport-items-array-after-button-click – MacGyver

0

Вы можете отметить этот выбор как 'selected' и проверить действия мыши. как простой подход.

+0

Просьба уточнить ваше предложение. – Natkeeran

+0

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

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