我有这个布局,一旦我设置了一些数据,动态布局不会调整大小,最终结果就像这样
这是使用
的代码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');
});
任何想法如何解决这个问题?
此致
答案 0 :(得分:10)
首先,这是一个快速入侵,它会使您的字段集在左侧自动扩展内容的长度:
在设置显示字段集的内容后,立即执行以下操作:
win.query('fieldset')[0].setHeight('auto');
没有太多修改,这是一个例子:jsfiddle
(query
是一种可用于继承Ext.Component
的所有组件的全局方法,用于查询下方的项目,如css选择器)
额外注意
有几点需要注意:
要使用align:'stretch'
,您无法将其作为组件的直接配置提供,您需要执行此操作:
Ext.create('Ext.panel.Panel', {
layout: {
type: 'hbox',
align: 'stretch'
},
items: [...]
});
您需要check out this testing demo。第一个窗口将按预期工作,而第二个和第三个窗口无法拉伸面板。
其次,autoHeight
自ExtJS 4以来已被删除,因此在您的配置中被忽略。您可能需要使用setHeight('auto')
手动将其设为autoHeight。
修改强>
似乎使用column
布局可以在不使用setHeight('auto')
的情况下实现相同的效果。 Check out the fiddle here
干杯!