Это конечно не полноценный рецепт, но может кому и поможет. Хотя большинство советов можно найти просто внимательно изучив API.
Изучение API
Для эффективной работ с ExtJs нужно хорошо знать ExtJs. Скорее всего там предусмотрен метод или настройка для того, что вы хотите реализовать или поменять. Компоненты наследуются друг от друга, так что свойства у многих похожи. Еще на странице API справа есть кнопочка "Hide inherited members", которая упростит изучение новых компонентов.
Проблемы с рендерингом компонентов
Иногда появляются ошибки, связанные с работой с элементов, который еще не отрендерился: установить фокус на кнопку или вызвать метод, который пересчитывает размеры элементов или меняет отображение панели. Лечиться это через defer. Пример:
panel.ownerCt.doLayout.defer(100, panel.ownerCt, [true]);
this.pass_field.focus.defer(500, this.pass_field);
Collapsible панели
ExtJs плохо работает со скрывающимися панелями(collapsible=True), если по-умолчанию они "захлопнуты". При раскрытии не верно рассчитываются размеры и панели "вылазят" куда не нужно. Проблема кстати связана с вышеописанной. Должно лечиться указанием размеров панелей в px. Просто указываем height: 300. Или "ужасными" манипуляциями по расчету размеров, если панели все таки должны иметь высоту в %. В обработчике afterlayout общего контейнера пересчитываем высоту:
var items = layout.getRenderedItems(container)
var h = container.getHeight() - items[0].getHeight() - items[1].getHeight();
items[2].setHeight(h);
По событиям expand и collapse нашей проблемной панели:
panel.ownerCt.doLayout.defer(100, panel.ownerCt, [true]);
Используйте Ext.Window.hide
Что бы каждый раз не создавать окно заново при открытии, используйте опцию closeAction: 'hide'. Для скрытия окна программно используйте метод hide.
Ext.form.FormPanel.clientValidation
Если использовать clientValidation: true, перед выполнением метода submit форма будет проверена на ошибки и будет отправлена только при успешной валидации. Эту опцию можно использовать что бы не проверять каждый раз isValid().