【问题标题】:extj4 grid doesn't fit in container panelextj4 网格不适合容器面板
【发布时间】:2012-08-03 08:48:11
【问题描述】:

我有一个包含数据的网格,包含在一个面板中,该面板还包含一个标题和一个较小的摘要网格。 该面板具有适合布局的布局,因此标题和第一个网格(即摘要网格)显示得很好。但是有问题的网格的记录比屏幕上显示的要多,并且它的组件高度没有调整到面板的大小,面板的大小总是适合浏览器窗口的高度。

我想要的是网格组件的高度,就像面板一样,调整到它的父级,这样网格体内的滚动条就会显示出来。

我的代码与此类似(initComponent 是 Ext.panel.Panel 的扩展): (此代码中的标题表示摘要网格)

initComponent: function (config) {
    var config = {
        border: false,
        hidden: false,
        hideMode: "display",
        padding: '5',
        layout: "fit"
    }

    Ext.apply(this, Ext.apply(this.initialConfig, config));
    this.callParent(arguments);

    title = Ext.create("Ext.panel.Panel", {
        html: '<h2>title</h2>',
        padding: '5',
        border: false
    });

// the stores for the grids are created here
    var storeHdr = DataStoreFactory.CreateStore("GetHeaderP", DataStoreFactory.fieldsCollection.Default);
    var storeBdy = DataStoreFactory.CreateStore("GetBodyP", DataStoreFactory.fieldsCollection.Default);

    var grdHeader = Ext.create("Ext.grid.Panel", {
        store: storeHdr,
        columns: getHeaderColumns(), 
        columnLines: true,
        autoHeight: false,
        autoWidth: false,
        enableHdMenu: false,
        enableColumnMove: false,
        enableColumnResize: false,
        disableSelection: true,
        trackMouseOver: false,
        sortable: false
    });

    var grdBody = Ext.create("Ext.grid.Panel", {
        id: id,
        store: storeBdy,
        columns: getBodyColumns(), 
        columnLines: true,
        autoHeight: false,
        autoWidth: false,
        autoScroll: true,
        scroll: "vertical",
        enableColumnMove: false,
        enableColumnResize: false,
        enableHdMenu: false,
        trackMouseOver: false,
        disableSelection: true
    });
},

    var headerGridContainer = Ext.create("Ext.panel.Panel", {
        layout: "fit",
        border: false,
        items: [grdHeader]
    });
    var bodyGridContainer = Ext.create("Ext.panel.Panel", {
        layout: "fit",
        border: false,
        items: [grdBody]
    });

    this.add(title);
    this.add(headerGridContainer);
    this.add(bodyGridContainer);
    storeHdr.load();
    storeBdy.load();
    this.doLayout();
}

我希望有人可以帮助我解决这个问题。提前致谢

edit - 截屏它是如何以及应该如何。实时数据被删除或抹掉,因为它是私有的并且与问题无关。

原来是这样的

应该是这样的

【问题讨论】:

    标签: layout extjs grid extjs4


    【解决方案1】:

    您以错误的方式使用布局。首先,您的主容器具有“适合”布局,当您内部有单个项目时应该使用该布局 - http://docs.sencha.com/ext-js/4-0/#!/api/Ext.layout.container.Fit - 并且您的项目很少。

    第二,尽量避免过度嵌套。您将网格包装成面板,然后将这些面板放入容器中。这有什么原因吗?

    请张贴您拥有的和想要拥有的屏幕截图,我们将帮助您确定为此需要使用的布局。

    更新:

    尝试在您的主容器中使用layout: 'hbox'。如果您希望主(底部)网格填充屏幕的其余部分,请指定flex: 1。儿子基本上你会有类似的东西(在你的主容器中):

    {
       layout: 'hbox',
       ..
       items: [{
          xtype: 'panel', // header
          height: 100, 
       },
       {
          xtype: 'grid', // first grid
          height: 200
       },
       {
          xtype: 'grid', // second grid
          flex: 1
       }]
    }
    

    【讨论】:

    • 我添加了截图。我希望它足够清楚。在第一张图片中,网格边框线一直超出面板的底部边框,而在第二张图片中(应该如何),网格面板的底部边框在外面板底部边框上方大约五个像素处结束。跨度>
    • 你不是说vbox而不是hbox吗?无论如何我选择哪种布局,我一直遇到同样的问题...... :((我确实删除了包装面板)
    • 我在没有设置包含标题和两个网格的面板的布局并计算第二个网格的高度的情况下完成了这项工作。
    猜你喜欢
    • 2012-01-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-12-06
    • 2016-02-04
    • 1970-01-01
    相关资源
    最近更新 更多