我有一个带有3个标签的标签面板。第一个选项卡是常规选项卡,有一个包含2种节点类型的树。当用户选择第一个选项卡时,我想在树中显示两种类型的节点。当他选择第二个或第三个标签时,我想分别隐藏一种类型的节点。我这样做是通过检查beforetabchange事件并从树存储中删除节点并将其添加回来的。但是,我不想在tabpanel中更改我的“卡片”,因为所有3个标签应该显示相同的内容。为了实现这一点,在我的处理程序中,我返回false以阻止标签更改。但是,这使得选定的选项卡永远不会更改,这会导致问题。有没有办法正常更改标签但保持一张卡有效?
由于
答案 0 :(得分:1)
为了获得所需的行为,您应该覆盖setActiveTab
的{{1}}方法或创建扩展Ext.tab.Panel
的自定义组件。
应优先考虑第二种替代方案,因为通常不需要修改核心组件行为。它会影响它的每一个实例。
这就是创建自己的组件(从Ext.tab.Panel
扩展)的样子:
Ext.tab.Panel
然后您仍然可以听Ext.define('Ext.ux.tab.CustomTabPanel', {
extend: 'Ext.tab.Panel',
alias: 'widget.customtabpanel',
initComponent: function() {
var me = this;
me.callParent(arguments);
},
setActiveTab: function(card) {
var me = this,
previous;
if(card) {
previous = me.getActiveTab();
me.tabBar.setActiveTab(card.tab);
// we basically remove the part that changes between cards,
// but keep firing 'tabchange' event
me.fireEvent('tabchange', me, card, previous);
}
}
});
事件来触发您的逻辑,但不会更改卡片。
我根据您的要求重新创建了fiddle,以向您展示它的实际工作方式。我希望你觉得它很有帮助。