我想要以下布局(右上方的图表计数是动态):
我尝试为主容器采用边框布局。 Chart1
为region: 'west'
,其余为region: 'center'
。
在中心,我有一个vbox容器,有2个容器,一个用于图表(顶部),一个是网格(底部)
问题是,这两个容器需要固定的宽度,否则它们的宽度为零......
此外,我希望所有容器都流畅,因此我可以调整所有内容,而不会获得空格。
如果我想让vbox中的某些容器获得 100%宽度,我会读到有关使用flex: 1
的内容,但这不起作用。它只是使vbox中的2个容器使用相同的高度。
有什么想法吗?
答案 0 :(得分:2)
这样的事情(在建筑师中快速绘制):
Ext.define('MyApp.view.MyWindow', {
extend: 'Ext.window.Window',
height: 600,
width: 1000,
layout: {
align: 'stretch',
type: 'hbox'
},
title: 'My Window',
initComponent: function () {
var me = this;
Ext.applyIf(me, {
items: [{
xtype: 'container',
flex: 1,
layout: {
type: 'fit'
},
items: [{
xtype: 'chart'
}]
}, {
xtype: 'container',
flex: 4,
layout: {
align: 'stretch',
type: 'vbox'
},
items: [{
xtype: 'container',
flex: 1,
layout: {
align: 'stretch',
type: 'hbox'
},
items: [{
xtype: 'chart',
flex: 1,
}, {
xtype: 'chart',
flex: 1,
}, {
xtype: 'chart',
flex: 1,
}, {
xtype: 'chart',
flex: 1,
}]
}, {
xtype: 'gridpanel',
flex: 1,
title: 'My Grid Panel',
}]
}]
});
me.callParent(arguments);
}
});
尽管如此,第二个容器的Flex值必须考虑您水平显示的图表数量。
答案 1 :(得分:1)
您是否尝试过table
布局?使用它创建这样的布局非常容易。例如:
Ext.onReady(function(){
Ext.create('Ext.Viewport', {
renderTo: Ext.getBody(),
style: 'border: 1px solid red',
layout: {
type: 'table',
columns: 5,
tdAttrs: {
style: 'padding: 20px; border: 1px solid blue;'
}
},
defaults: {
bodyStyle: 'border: 1px solid red'
},
items: [
{ xtype: 'panel', html: 'Chart1', rowspan: 2 },
{ xtype: 'panel', html: 'Chart2' },
{ xtype: 'panel', html: 'Chart3' },
{ xtype: 'panel', html: 'Chart4' },
{ xtype: 'panel', html: 'Chart5' },
{ xtype: 'panel', html: 'Grid', colspan: 4 }
]
});
});
工作样本:http://jsbin.com/ojijax/1/
要拥有动态布局IMO,最佳解决方案是使用hbox
和vbox
布局。
例如,您可以将图表从2到n包装到一个容器中,假设为chartPanel
- 这将具有hbox
布局。然后将chartPanel
和grid
包装到另一个容器中,panel
布局为vbox
。然后使用chart1
布局panel
再次打包hbox
。然后,您必须为每个align: stretch
布局设置box
,并使用适当的flex来平均分割屏幕。
答案 2 :(得分:-1)
我认为你正在使用extjs的panel.add
选项在for循环中加载chart2,3,4,5(更好的方法)。
如果是这样,那么保持这些面板的计数(这里是4)和每个面板,同时指定宽度,如
width:(1/countOfchrtLIst2345) * grid.getWidth(),
无论计数如何,它都会在顶部vbox中的所有这些水平面板之间划分可用宽度并分配。
在你的例子中,它指定了
(1/4)* 200
(思维网格的宽度为200)