如何在不改变ExtJS中的卡的情况下选择tabpanel中的选项卡?

时间:2015-03-23 08:29:28

标签: javascript extjs tabs

我有一个带有3个标签的标签面板。第一个选项卡是常规选项卡,有一个包含2种节点类型的树。当用户选择第一个选项卡时,我想在树中显示两种类型的节点。当他选择第二个或第三个标签时,我想分别隐藏一种类型的节点。我这样做是通过检查beforetabchange事件并从树存储中删除节点并将其添加回来的。但是,我不想在tabpanel中更改我的“卡片”,因为所有3个标签应该显示相同的内容。为了实现这一点,在我的处理程序中,我返回false以阻止标签更改。但是,这使得选定的选项卡永远不会更改,这会导致问题。有没有办法正常更改标签但保持一张卡有效?

由于

1 个答案:

答案 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,以向您展示它的实际工作方式。我希望你觉得它很有帮助。