重新调整表单内容以适应浏览器窗口 - 使用卡布局

时间:2012-08-03 18:02:24

标签: extjs4 extjs4.1

我需要选项卡面板以适应浏览器窗口大小。我使用过card layout,并没有重新调整大小以适应浏览器窗口。我想我错过了viewPort中的一些属性。

launch: function() {                           
        Ext.create('Ext.container.Viewport', {    
            layout: 'card',
            items: [  
            { 
                xtype: 'panel',   
                items: { xtype: 'tabP1' } 
            },
            {
                xtype: 'panel',
                items: { xtype:'tabP2' }
            }                
            ,
            {
                xtype: 'panel',
                items: { xtype:'tabP3' }
            }           
            ]
        }); 
    },

2.)我的一个tabpanels;我正在使用absolute layout。我正在使用这种布局,因为它很容易设置我想要它的表单组件。因此,我想要一个使用相同布局的解决方案。

Ext.define('MyApp.view.MyForm', {
    extend: 'Ext.form.Panel',
     alias:'widget.tabP1',
   // height: 250,
   // width: 726,
 layout: {
    type: 'absolute'
},
    bodyPadding: 10,
    title: 'My Form',

    initComponent: function() {
        var me = this;

        Ext.applyIf(me, {
            items: [
                {
                    xtype: 'gridpanel',
                    title: 'My Grid Panel',
                    columns: [
                        {
                            xtype: 'gridcolumn',
                            dataIndex: 'string',
                            text: 'String'
                        },
                        {
                            xtype: 'numbercolumn',
                            dataIndex: 'number',
                            text: 'Number'
                        },
                        {
                            xtype: 'datecolumn',
                            dataIndex: 'date',
                            text: 'Date'
                        },
                        {
                            xtype: 'booleancolumn',
                            dataIndex: 'bool',
                            text: 'Boolean'
                        }
                    ],
                    viewConfig: {

                    }
                }
            ]
        });

        me.callParent(arguments);
    }

});

更新2

更新2

launch: function() {                           
            Ext.create('Ext.container.Viewport', {    
                layout: 'card',
                items: [  
                { 

                     xtype: 'tabP1'  
                },
                {

                    xtype:'tabP2' 
                }                
                ,
                {

                    xtype:'tabP3' 
                }           
                ]
            }); 
        },


onSuccess: function() {  
     this.getViewport().getLayout().setActiveItem(1); 
    }, 

我在使用您的代码时遇到错误,说this.getViewport().getLayout().setActiveItem(1)不是函数。我想这是因为我使用了border layout。我怎么解决这个问题?

1 个答案:

答案 0 :(得分:0)

你的问题是“过度嵌套”为什么你把'tabPFoo'放在没有布局的面板里?它们充其量是多余的,也会导致布局系统在不需要时花费更多的周期。

Ext.require('*');

Ext.onReady(function(){

    var vp = new Ext.container.Viewport({
        layout: 'card',
        items: [{
            xtype: 'grid',
            store: {
                fields: ['name'],
                data: [{
                    name: 'Name 1'
                }]
            },
            columns: [{
                flex: 1,
                dataIndex: 'name',
                text: 'Name'
            }],
            listeners: {
                itemclick: function(view){
                    var grid = view.ownerCt,
                        next = grid.nextSibling();

                    vp.getLayout().setActiveItem(next);
                }
            }
        }, {
            xtype: 'grid',
            store: {
                fields: ['name'],
                data: [{
                    name: 'Name 2'
                }]
            },
            columns: [{
                flex: 1,
                dataIndex: 'name',
                text: 'Name'
            }],
            listeners: {
                itemclick: function(view){
                    var grid = view.ownerCt,
                        next = grid.nextSibling();

                    vp.getLayout().setActiveItem(next);
                }
            }
        }, {
            xtype: 'grid',
            store: {
                fields: ['name'],
                data: [{
                    name: 'Name 3'
                }]
            },
            columns: [{
                flex: 1,
                dataIndex: 'name',
                text: 'Name'
            }],
            listeners: {
                itemclick: function(view){
                    var grid = view.ownerCt,
                        next = grid.previousSibling().previousSibling();

                    vp.getLayout().setActiveItem(next);
                }
            }
        }]
    });

});

显然,这不是MVC风格,但这是布局应该采用的结构。