ExtJS 工具栏:如何让项目始终可直接访问,从不放入 "more" 菜单
ExtJS Toolbar: how keep an item always directly accesible, never put in the "more" menu
我的面板顶部有一个 ExtJS 工具栏,它可以有 5 到 10 个操作(按钮),加上一个搜索文本字段作为最后一项。
根据 window 的大小,所有项目都可以直接放在工具栏上,或者其中一些项目可能会放入 "more" 菜单按钮中。我需要指定其中一个按钮具有某种优先级,因此它是最后一个放在 "more" 按钮上的按钮。甚至永远不会穿上它。
有什么办法可以实现吗?
解法:
添加带有代码的项目。我不知道这是否正是你的情况,但我经常使用它来排列工具栏中的按钮:
工作示例:
Ext.onReady(function(){
Ext.QuickTips.init();
Ext.FocusManager.enable();
Ext.Ajax.timeout = 100 * 1000;
Ext.define('Trnd.TestWindow', {
extend: 'Ext.window.Window',
closeAction: 'destroy',
border: false,
width: 400,
height: 500,
modal: true,
closable: true,
resizable: true,
layout: 'fit',
fillToolbar: function() {
var me = this;
me.toolbar.add(me.button5);
me.toolbar.add(me.button1);
me.toolbar.add(me.button2);
me.toolbar.add(me.button3);
me.toolbar.add(me.edit);
me.toolbar.add(me.button4);
},
initComponent: function() {
var me = this;
me.callParent(arguments);
me.button1 = Ext.create('Ext.button.Button', {
text: 'Button 1'
});
me.button2 = Ext.create('Ext.button.Button', {
text: 'Button 2'
});
me.button3 = Ext.create('Ext.button.Button', {
text: 'Button 3'
});
me.button4 = Ext.create('Ext.button.Button', {
text: 'Button 4'
});
me.button5 = Ext.create('Ext.button.Button', {
text: 'Button 5'
});
me.edit = Ext.create('Ext.form.TextField', {
text: 'Edit'
});
me.toolbar = Ext.create('Ext.toolbar.Toolbar', {
enableOverflow: true,
items: []
});
me.panel = Ext.create('Ext.panel.Panel', {
tbar: me.toolbar
});
me.add(me.panel);
me.fillToolbar();
}
});
var win = new Trnd.TestWindow({
});
win.show();
});
备注:
使用 ExtJS 4.2 测试
我通过将工具栏包装在这样的容器中解决了这个问题:
tbar: [
{
xtype: 'container',
layout: {
type: 'hbox',
pack: 'start',
align: 'stretch'
},
items: [
{
xtype: 'mail-compose-toolbar',
flex: 1
},
{
xtype: 'mail-compose-search',
itemId: 'mailComposeSearch',
width: 200
}
]
}
]
搜索字段的宽度是固定的,工具栏有一个 flex:1,所以它会伸展。
我的面板顶部有一个 ExtJS 工具栏,它可以有 5 到 10 个操作(按钮),加上一个搜索文本字段作为最后一项。
根据 window 的大小,所有项目都可以直接放在工具栏上,或者其中一些项目可能会放入 "more" 菜单按钮中。我需要指定其中一个按钮具有某种优先级,因此它是最后一个放在 "more" 按钮上的按钮。甚至永远不会穿上它。
有什么办法可以实现吗?
解法:
添加带有代码的项目。我不知道这是否正是你的情况,但我经常使用它来排列工具栏中的按钮:
工作示例:
Ext.onReady(function(){
Ext.QuickTips.init();
Ext.FocusManager.enable();
Ext.Ajax.timeout = 100 * 1000;
Ext.define('Trnd.TestWindow', {
extend: 'Ext.window.Window',
closeAction: 'destroy',
border: false,
width: 400,
height: 500,
modal: true,
closable: true,
resizable: true,
layout: 'fit',
fillToolbar: function() {
var me = this;
me.toolbar.add(me.button5);
me.toolbar.add(me.button1);
me.toolbar.add(me.button2);
me.toolbar.add(me.button3);
me.toolbar.add(me.edit);
me.toolbar.add(me.button4);
},
initComponent: function() {
var me = this;
me.callParent(arguments);
me.button1 = Ext.create('Ext.button.Button', {
text: 'Button 1'
});
me.button2 = Ext.create('Ext.button.Button', {
text: 'Button 2'
});
me.button3 = Ext.create('Ext.button.Button', {
text: 'Button 3'
});
me.button4 = Ext.create('Ext.button.Button', {
text: 'Button 4'
});
me.button5 = Ext.create('Ext.button.Button', {
text: 'Button 5'
});
me.edit = Ext.create('Ext.form.TextField', {
text: 'Edit'
});
me.toolbar = Ext.create('Ext.toolbar.Toolbar', {
enableOverflow: true,
items: []
});
me.panel = Ext.create('Ext.panel.Panel', {
tbar: me.toolbar
});
me.add(me.panel);
me.fillToolbar();
}
});
var win = new Trnd.TestWindow({
});
win.show();
});
备注:
使用 ExtJS 4.2 测试
我通过将工具栏包装在这样的容器中解决了这个问题:
tbar: [
{
xtype: 'container',
layout: {
type: 'hbox',
pack: 'start',
align: 'stretch'
},
items: [
{
xtype: 'mail-compose-toolbar',
flex: 1
},
{
xtype: 'mail-compose-search',
itemId: 'mailComposeSearch',
width: 200
}
]
}
]
搜索字段的宽度是固定的,工具栏有一个 flex:1,所以它会伸展。