2012-06-28 4 views
1

В нашем приложении есть вкладка, в которой мы добавляем/удаляем панель динамически.Вызывается метод doLayout() a после добавления дочернего элемента к родительскому?

Панели добавляются нажатием пункта меню с помощью следующего кода в обработчике меню:

Ext.getCmp('mainTabPanelId').add(getPanel()); 

getPanel() Здесь метод возвращает панель после его создания.

Предполагая, что идентификатор главной вкладки панели mainTabPanelId и в детской панели panelId, в этом контексте, может кто-нибудь руководство по следующему:

  1. Нужно позвонить doLayout() на mainTabPanel после добавить метод?
  2. Следует ли вызывать doLayout() на mainTabPane л или на недавно добавленной дочерней панели, то есть Ext.getCmp('mainTabId').doLayout() или Ext.getCmp('panelId').doLayout()?
  3. Позвоните по телефону doLayout() по всем вопросам, связанным с рендерингом, например, с прокрутками.
  4. Метод getPanel() должен возвращать уже созданную панель (используя Ext.create) или должен ли она вернуть объект конфигурации (с xtype:'panel')? Какой из них должен быть предпочтительнее для лучшей производительности, учитывая время?

ответ

2

AbstractContainer::add()

< ...> Если контейнер был сконфигурирован с размерно-управляющим менеджером компоновки, контейнер будет пересчитывать его внутреннее расположение в это время тоже.

Таким образом, вы не должны делать - потому что:

AbstractContainer::doLayout()

< ...> Структура использует это внутренне, чтобы обновить макеты образуют в большинстве случаев ,

AbstractContainer::defaults

По умолчанию работать, дочерние элементы должны быть добавлены с помощью {xtype: ......} НЕ используя Ext.create ("widget.type", {}) © roger.spall

Поэтому я бы предпочел вернуть объект конфигурации вместо самих компонентов.

+0

Спасибо за сообщение o_nix. К сожалению, если мы не вызываем doLayout(), тогда макет выглядит сломанным, но как только будет сделан вызов doLayout(), все исправления (например, появление полосы прокрутки и т. Д.) Будут исправлены. Мы тестировали это во многих браузерах и обнаружили, что вызов doLayout() является обязательным после динамического добавления. – netemp

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