[Новый ответ, чтобы я мог отформатировать код]
Один из подходов состоит в том, чтобы сделать внешний макет более разработанным, чтобы делать то, что вы хотите, например, BorderLayout с севером (ваши верхние поля) и центром (редактор HTML). Таким образом, html-редактор может быть просто привязан к 100% высоты его контейнера (центральная область). В этом случае, поскольку компоновка будет должным образом управляться, мой предыдущий совет по doLayout () должен сработать.
Если вы действительно хотите управлять полями за пределами макета, которые помогут вам в этом, то вам придется управлять высотами вручную. Изменение свойства привязки - один из способов. Способ, которым я делал это в прошлом (и более предпочтительный), заключается в том, чтобы прослушать соответствующее событие и установить размер компонентов по мере необходимости. Например, вы можете добавить слушателя изменения размера в окно:
listeners: {
'resize': function(){
Ext.getCmp('my-htmleditor').setHeight(w.getEl().getHeight()-110);
}
}
Используя ваш тестовый код, вы достаточно близки к этому. Тем не менее, в реальном коде вы бы хотели получить высоту от существующих видимых компонентов и вычесть это число, а не жестко закодировать его, но вы поняли идею. Один из способов упростить этот подход - добавить верхние поля в отдельную панель с именем autoHeight: true, затем, после отображения или скрытия полей, просто измерьте высоту этой панели и вычтите ее из высоты окна (плюс поля / отступы). получить высоту вашего html-редактора (это то, что я делал в прошлом, когда не мог полагаться на макет для управления им).
Как вы можете видеть, есть много способов снять шкуру с этой кошки, поэтому вы можете выбрать подход, который подходит вам больше всего.