ExtJS Advanced Fluid Border Layout - PullRequest
       25

ExtJS Advanced Fluid Border Layout

1 голос
/ 05 апреля 2011

Мне нужно создать расширенный, гибкий макет границы для нашей системы отчетов.

Западная панель будет разделена на 2 отдельные панели, верхняя часть для формы фильтра и нижняя для навигации.

Центральная панель будет разделена на 3 отдельные панели, верхняя для основнойсетка данных и 2 нижние панели для сеток подотчетности.В какой-то момент мне могут понадобиться 3 нижних панели, но я надеюсь избежать этого.

Вот пример того, что я ищу: http://dl.dropbox.com/u/298258/Amistaff/desiredLayout.png

Что у меня есть до сих поропределенно менее чем удовлетворительно.

http://dl.dropbox.com/u/298258/Amistaff/currentLayout.png

Вот код:

var ReportForm = new Ext.FormPanel({
    url:            '',
    frame:          false,
    border:         false,
    title:          'Filter Results',
    width:          260,
    labelWidth:     50,
    padding:        '10 0 0 5',
    standardSubmit: true,
    items:          [
                        {
                            fieldLabel:     'Client',                       
                            hiddenName:     'ClientID',
                            mode:           'local',
                            store:          frmClientStore,
                            displayField:   'CompanyName',
                            valueField:     'ClientID',
                            width:          150,
                            editable:       true,
                            triggerAction:  'all',
                            xtype:          'combo'
                        }

    ],
    buttons:        [
                        {text:'Export',handler:function(){}},
                        {text:'Search',handler:function(){}}, 
                        {text:'Reset',handler:function(){}}
    ]
});

var ReportGrid = new Ext.grid.GridPanel({
    id:                 'ReportGrid',
    width:              '100%',
    height:             '50%',
    viewConfig:         {
                            forceFit:       true
    },
    autoHeight:         true,
    loadMask:           true,
    stripeRows:         true,
    store:              ReportStore,
    margins:            '5 5 5 5',
    cm:                 ReportColumnModel 
    ,bbar:              new Ext.PagingToolbar
                        (
                            {
                                pageSize:       10,
                                store:          ReportStore,
                                displayInfo:    true,
                                displayMsg:     'Displaying results {0} - {1} of {2}'
                            }
                        )

});

var viewport = new Ext.Viewport({
    layout:         'border',
    items:          [
                        {
                            region:             'west',
                            layout:             'vbox',
                            layoutConfig:       {
                                                    align:      'stretch'
                            },
                            width:              260,
                            minSize:            175,
                            maxSize:            400,
                            margins:            '5 5 5 5',
                            items:              [
                                                    ReportForm,
                                                    {
                                                        region:     'south',
                                                        title:      'Superuser',
                                                        border:     false,
                                                        xtype:      'tabpanel',
                                                        activeTab:  0,
                                                        items:      [
                                                                        {
                                                                            title:      'General',
                                                                            xtype:      'panel',
                                                                            height:     200,
                                                                            html:       '',
                                                                        },
                                                                        {
                                                                            title:      'Exams',
                                                                            height:     200,
                                                                            html:       ''
                                                                        }
                                                                    ]
                                                    }
                                                ]
                        },
                        new Ext.Panel({
                            region:             'center',
                            deferredRender:     false,
                            layout:             'fit',
                            margins:            '5 5 5 0',
                            items:              [
                                                    ReportGrid,
                                                    new Ext.Panel({
                                                        region:     'south',
                                                        border:     false,
                                                        height:     '50%',
                                                        html:       'foo',
                                                        layout:     'fit',
                                                        items:      [
                                                                        new Ext.Panel({
                                                                            region:     'west',
                                                                            width:      '50%',
                                                                            border:     false,
                                                                            html:       'West'
                                                                        }),
                                                                        new Ext.Panel({
                                                                            region:     'east',
                                                                            width:      '50%',
                                                                            border:     false,
                                                                            html:       'East'
                                                                        })
                                                                    ]
                                                    })
                                                ]
                        })
                    ]
});

Спасибо ...

РЕДАКТИРОВАТЬ:

Большое спасибо amol за ответ ниже.У меня есть еще один вопрос.Если я сверну форму в западном регионе, как мне изменить размер панели навигации, чтобы заполнить оставшееся пространство?

1 Ответ

4 голосов
/ 05 апреля 2011

enter image description here

код -


var ReportForm = new Ext.FormPanel({
        url:            '',
        frame:          false,
        border:         false,
        title:          'Filter Results',
        width:          260,
        labelWidth:     50,
        padding:        '10 0 0 5',
        standardSubmit: true,
        items:          [
                            {
                                fieldLabel:     'Client',                       
                                hiddenName:     'ClientID',
                                mode:           'local',
                                //store:          frmClientStore,
                                displayField:   'CompanyName',
                                valueField:     'ClientID',
                                width:          150,
                                editable:       true,
                                triggerAction:  'all',
                                xtype:          'combo'
                            }

        ],
        buttons:        [
                            {text:'Export',handler:function(){}},
                            {text:'Search',handler:function(){}}, 
                            {text:'Reset',handler:function(){}}
        ]
    });

    var ReportGrid = new Ext.grid.GridPanel({
        id:                 'ReportGrid',
        flex:1,
        viewConfig:         {
                                forceFit:       true
        },
        loadMask:           true,
        stripeRows:         true,
        //store:              ReportStore,
        margins:            '5 5 5 5',
        cm:                 new Ext.grid.ColumnModel({
            columns:[
                     {header:'A column', dataIndex:'afield'},
                     {header:'B column', dataIndex:'bfield'}
            ]
        }), 
        store:new Ext.data.ArrayStore({
            autoLoad:true,
            fields:['afield', 'bfield'],
            data:[['value 1','value 3'],['value 2', 'value4']]
        }),
        bbar:              new Ext.PagingToolbar
                            (
                                {
                                    pageSize:       10,
                                    //store:          ReportStore,
                                    displayInfo:    true,
                                    displayMsg:     'Displaying results {0} - {1} of {2}'
                                }
                            )

    });

    var viewport = new Ext.Viewport({
        layout:         'border',
        items:          [
                            {
                                region:             'west',
                                layout:             'vbox',
                                layoutConfig:       {
                                                        align:      'stretch'
                                },
                                width:              260,
                                minSize:            175,
                                maxSize:            400,
                                margins:            '5 5 5 5',
                                items:              [
                                                        ReportForm,
                                                        {
                                                            region:     'south',
                                                            title:      'Superuser',
                                                            border:     false,
                                                            xtype:      'tabpanel',
                                                            activeTab:  0,
                                                            items:      [
                                                                            {
                                                                                title:      'General',
                                                                                xtype:      'panel',
                                                                                height:     200,
                                                                                html:       ''
                                                                            },
                                                                            {
                                                                                title:      'Exams',
                                                                                height:     200,
                                                                                html:       ''
                                                                            }
                                                                        ]
                                                        }
                                                    ]
                            },
                            new Ext.Panel({
                                region:             'center',
                                deferredRender:     false,
                                layout:             'vbox',
                                layoutConfig:{align:'stretch'},
                                margins:            '5 5 5 0',
                                items:              [
                                                        ReportGrid,
                                                        {
                                                            border:     false,
                                                            flex:1,
                                                            layout:     'hbox',
                                                            layoutConfig:{align:'stretch'},
                                                            defaults:{flex:1},
                                                            items:      [
                                                                            new Ext.Panel({
                                                                                html:       'West'
                                                                            }),
                                                                            new Ext.Panel({
                                                                                html:       'East'
                                                                            })
                                                                        ]
                                                        }
                                                    ]
                            })
                        ]
    });
...