实际上相当棘手。
如果您检查它们的源代码,Ext.tab.Panel
实际上使用卡片布局,对于每个选项卡,它们使用Ext.tab.Tab
来创建选项卡按钮。
然后,如果您检查Ext.tab.Tab
的源代码,它实际上是扩展了Ext.button.Button
,这只是一个修改过的按钮。
所以,如果您需要添加工具,我恐怕最好的方法是扩展Ext.tab.Tab
并编写自己的选项卡按钮。您可能需要查看他们在/src/tab/Tab.js
的233行中如何创建可关闭按钮。
(Ext-4.0.2a)
祝好
编辑
因此我们知道Ext.tab.Tab
正在扩展Ext.button.Button
,我们可以利用这一事实,并提出了这种解决方案,请在fiddle中查看:http://jsfiddle.net/uBxqY/4/
基本上,我扩展了Ext.tab.Tab
,并修改了buttonWrapper类,以便添加箭头样式。没有什么花哨的东西,一切都可以毫不费力地工作。
我还覆盖了onClick
函数,以便在用户单击选项卡本身时不会展开菜单。有点不洁,但它有效(从Ext.button.Split
中借鉴了prototype.onClick
)。
工作示例:http://jsfiddle.net/uBxqY/4/,或源码:
Ext.define('Ext.ux.tab.Tab', {
extend: 'Ext.tab.Tab',
alias: 'widget.ux.menutab',
requires: [
'Ext.button.Split'
],
menuAlign: 'tl-bl?',
constructor: function() {
this.callParent(arguments);
this.onClick = Ext.button.Split.prototype.onClick;
},
onRender: function() {
this.callParent(arguments);
this.btnWrap.replaceCls('x-tab-arrow x-tab-arrow-right',
'x-btn-split x-btn-split-right')
.setStyle('padding-right', '20px !important');
}
});
Ext.create('Ext.tab.Panel', {
renderTo: Ext.getBody(),
style: 'margin:10px;',
defaults: {
bodyStyle: 'padding:10px;'
},
plain: true,
items: [{
title: 'Split Tab',
tabConfig: {
xtype: 'ux.menutab',
menu: [{
text: 'Menu item 1'
},{
text: 'Menu item 2'
}]
},
html: 'Lorem ipsum dolor sit amet, consectetur adipisicing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum.'
},{
title: 'Normal Tab',
html: 'Lorem ipsum dolor sit amet, consectetur adipisicing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum.'
}]
});