Ext JS 4 和 fieldcontainer 位置的对齐问题
Alignment Issue With Ext JS 4 and fieldcontainer position
我有一个 window,一个面板(填满 window 的整个 space)在这个 window 里面和面板里面两个 fieldcontainers
水平的左侧和右侧。
----------------------------
| | |
| | |
| left FC | right FC |
| | |
| | |
| | |
----------------------------
两者都可以在运行时隐藏但是,当我设置 FC_left.Visible(false)
右 fieldcontainer
边框不在 window 的左侧但左 window边框和左边(这个右边fieldcontainer
)容器边框。像这样:
----------------------------
| | |
| | |
| | right FC |
| | |
| | |
| | |
----------------------------
当左边的容器不可见时,我想在左边的地方看到右边的容器。怎么做?
您需要提供 flex:1
or width:'50%'
to your fieldcontainer
。
在此 FIDDLE 中,我使用 panel
和 fieldcontainer
创建了一个演示。我希望这会 help/guide 你达到你的要求。
代码片段
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()
});
}
});
我有一个 window,一个面板(填满 window 的整个 space)在这个 window 里面和面板里面两个 fieldcontainers
水平的左侧和右侧。
----------------------------
| | |
| | |
| left FC | right FC |
| | |
| | |
| | |
----------------------------
两者都可以在运行时隐藏但是,当我设置 FC_left.Visible(false)
右 fieldcontainer
边框不在 window 的左侧但左 window边框和左边(这个右边fieldcontainer
)容器边框。像这样:
----------------------------
| | |
| | |
| | right FC |
| | |
| | |
| | |
----------------------------
当左边的容器不可见时,我想在左边的地方看到右边的容器。怎么做?
您需要提供 flex:1
or width:'50%'
to your fieldcontainer
。
在此 FIDDLE 中,我使用 panel
和 fieldcontainer
创建了一个演示。我希望这会 help/guide 你达到你的要求。
代码片段
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()
});
}
});