Как установить максимальную высоту для макета extjs hbox?
У меня есть этот макет, и после того, как я установил некоторые данные, динамический макет не изменяет размер и конечный результат выглядит следующим образом
![issue]()
это код im, использующий
win = Ext.create('widget.window', {
title: 'Layout Window',
closable: true,
closeAction: 'hide',
width: 750,
height: 500,
layout: 'fit',
animCollapse: true,
bodyPadding: 5,
items: [{
xtype: 'container',
layout: 'hbox',
align: 'stretch',
items: [{
xtype: 'fieldset',
flex:1,
title: 'Details',
margins:'0 5 0 0',
layout: 'anchor',
autoHeight: true,
items: [{
xtype: 'displayfield',
fieldLabel: 'Name',
name: 'customer_name',
id: 'customer_name',
width: 300
},{
xtype: 'displayfield',
fieldLabel: 'ID Card',
id: 'customer_id',
name: 'customer_id',
width: 300
},{
xtype: 'displayfield',
fieldLabel: 'Address',
name: 'address',
id: 'address',
width: 300
}]
},{
xtype: 'fieldset',
title: 'Details',
margins:'0 0 5 0',
flex:1,
layout: 'anchor',
autoHeight: true,
items: [{
xtype: 'textfield',
labelWidth: 120,
fieldLabel: 'invoice',
anchor: '98%',
name: 'invoice_number',
id: 'invoice_number',
allowBlank: false,
readOnly: true
},{
xtype: 'textfield',
labelWidth: 120,
fieldLabel: 'Payment Amount',
anchor: '98%',
name: 'payment_amount',
id: 'payment_amount',
allowBlank: false
},{
xtype: 'button',
id: 'test'
}]
}]
}]
}).show();
это, я просто использовал для установки данных для отображения полей в качестве теста
Ext.getCmp('test').on('click', function(){
Ext.getCmp('customer_name').setValue('customer name customer_name customer_name customer_name');
Ext.getCmp('customer_id').setValue('855');
Ext.getCmp('address').setValue('some text, some text, some text, some text');
});
любая идея, как это исправить?
Привет
Ответы
Ответ 1
Прежде всего, это быстрый хак, который сделает ваш набор полей слева для автоматического расширения по длине содержимого:
Сразу после того, как вы установите содержимое набора полей дисплея, сделайте следующее:
win.query('fieldset')[0].setHeight('auto');
Без большой модификации это пример: jsfiddle
(query
- это метод, доступный глобально для всех компонентов, наследующих Ext.Component
, для запроса элементов под ним, например, селекторов css)
Дополнительная заметка
Несколько замечаний:
-
Чтобы использовать align:'stretch'
, вы не можете предоставить его как прямую конфигурацию для компонента, вам нужно будет сделать это:
Ext.create('Ext.panel.Panel', {
layout: {
type: 'hbox',
align: 'stretch'
},
items: [...]
});
Вы захотите проверить эту демонстрационную версию. Первое окно будет работать как ожидалось, а второе и третье окна не смогут растянуть панели.
-
Во-вторых, autoHeight
был удален с ExtJS 4 и поэтому он игнорируется в вашей конфигурации. Вероятно, вам нужно использовать setHeight('auto')
, чтобы сделать его autoHeight вручную.
ИЗМЕНИТЬ
Кажется, что использование макета column
позволяет достичь такого же эффекта без использования setHeight('auto')
. Посмотрите здесь скрипку.
Ура!