其实挺难的。
如果你查看他们的源代码,Ext.tab.Panel
其实是在使用 Card Layout 并且对于每个选项卡,他们都是用来Ext.tab.Tab
做选项卡按钮的。
那么如果你查看 的源代码Ext.tab.Tab
,它实际上是扩展Ext.button.Button
,它只是一个修改过的按钮。
所以如果你需要添加工具,恐怕最好的办法就是扩展Ext.tab.Tab
和编写你自己的选项卡按钮。你可能想看看他们是如何在233closeable
行创建按钮的。/src/tab/Tab.js
(Ext-4.0.2a)
干杯
编辑
所以我们知道Ext.tab.Tab
正在扩展Ext.button.Button
,我们可以利用这个事实,我已经提出了这个解决方案,在 fiddle 中查看:http: //jsfiddle.net/uBxqY/4/
基本上,我已经扩展Ext.tab.Tab
并修改了 buttonWrapper 类,以便添加箭头 css。没有什么花哨的,一切都是开箱即用的。
此外,我已经覆盖了该onClick
功能,因此当用户单击选项卡本身时菜单不会展开。有点脏,但它可以工作(借prototype.onClick
自Ext.button.Split
.
工作示例: http: //jsfiddle.net/uBxqY/4/,或来源:
Ext.define('Ext.ux.tab.Tab', {
extend: 'Ext.tab.Tab',
alias: 'widget.ux.menutab',
requires: [
//We just need the onClick from Split button
'Ext.button.Split'
],
/**
* Menu align, if you need to hack the menu alignment
*/
menuAlign: 'tl-bl?',
constructor: function() {
this.callParent(arguments);
//Kind of harsh, we need the click action from
//split button instead.
//Or if you preferred, you can always override this
//function and write your own handler.
this.onClick = Ext.button.Split.prototype.onClick;
},
/**
* Hack the default css class and add
* some resonable padding so to make it looks
* great :)
*/
onRender: function() {
this.callParent(arguments);
//We change the button wrap class here! (HACK!)
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 is taken up during tab formation
tabConfig: {
//We use our own custom tab!
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.'
}]
});