如何为extjs hbox布局设置自动高度?

时间:2011-07-28 23:27:17

标签: javascript css extjs extjs4

我有这个布局,一旦我设置了一些数据,动态布局不会调整大小,最终结果就像这样

issue

这是使用

的代码
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 个答案:

答案 0 :(得分:10)

首先,这是一个快速入侵,它会使您的字段集在左侧自动扩展内容的长度:

在设置显示字段集的内容后,立即执行以下操作:

win.query('fieldset')[0].setHeight('auto');

没有太多修改,这是一个例子:jsfiddle

query是一种可用于继承Ext.Component的所有组件的全局方法,用于查询下方的项目,如css选择器)

额外注意

有几点需要注意:

  1. 要使用align:'stretch',您无法将其作为组件的直接配置提供,您需要执行此操作:

    Ext.create('Ext.panel.Panel', {
        layout: {
            type: 'hbox',
            align: 'stretch'
        },
        items: [...]
    });
    

    您需要check out this testing demo。第一个窗口将按预期工作,而第二个和第三个窗口无法拉伸面板。

  2. 其次,autoHeight自ExtJS 4以来已被删除,因此在您的配置中被忽略。您可能需要使用setHeight('auto')手动将其设为autoHeight。

  3. 修改

    似乎使用column布局可以在不使用setHeight('auto')的情况下实现相同的效果。 Check out the fiddle here

    干杯!