我有一个窗口,在该窗口内有一个面板(占整个窗口的空间),在内部面板的左侧和右侧水平有两个fieldcontainers
。
----------------------------
| | |
| | |
| left FC | right FC |
| | |
| | |
| | |
----------------------------
两者都可以在运行时中隐藏,但是当我设置
FC_left.Visible(false)
时,右边的fieldcontainer
边框不在窗口的左侧,但是左边的窗口边框和左边(右边的fieldcontainer
)容器边框之间有很大的余量。像这样:----------------------------
| | |
| | |
| | right FC |
| | |
| | |
| | |
----------------------------
当左侧容器不可见时,我想在左侧位置看到右侧容器。怎么做?
最佳答案
您需要为flex:1
提供width:'50%'
或fieldcontainer
。
在此FIDDLE中,我使用panel
和fieldcontainer
创建了一个演示。我希望这会帮助/指导您达到要求。
代码片段
Ext.application({
name: 'Fiddle',
launch: function () {
/*
* this function will fire when hide/show button clicked
* @param {Ext.button.Button}
*/
function onHideShow(btn) {
var fCnt = btn.up('panel').down(`#${btn.label}`);
if (fCnt.isHidden()) {
fCnt.setVisible(true);
btn.setText(`Hide ${btn.label}`);
} else {
fCnt.setVisible(false);
btn.setText(`Show ${btn.label}`);
}
}
//Create panel with field container
Ext.create('Ext.panel.Panel', {
title: 'Basic example',
//height:400,
layout: 'hbox',
bodyPadding: 10,
defaults: {
xtype: 'fieldcontainer',
flex: 1,
//width:'50%',
style: 'border: 2px solid #ccc;',
labelAlign: 'top',
// The body area will contain three text fields, arranged
// horizontally, separated by draggable splitters.
layout: 'vbox',
defaults: {
width: '100%',
margin: '5 10'
},
items: [{
xtype: 'textfield',
flex: 1
}, {
xtype: 'splitter'
}, {
xtype: 'textfield',
flex: 1
}, {
xtype: 'splitter'
}, {
xtype: 'textfield',
flex: 1
}]
},
items: [{
itemId: 'Left',
fieldLabel: 'Left field container',
margin: '0 5'
}, {
itemId: 'Right',
fieldLabel: 'Right field container'
}],
tbar: ['->', {
text: 'Hide Left',
label: 'Left',
handler: onHideShow
}, {
text: 'Hide Right',
label: 'Right',
handler: onHideShow
}],
renderTo: Ext.getBody()
});
}
});