2012-03-28 51 views
0

我不使用选项卡面板只是选项卡栏,并且必须防止按某些条件更改选项卡。ExtJS 4:防止使用TabBar更改选项卡

在ExtJS文档中,我发现change事件为Ext.tab.Bar,但当标签页已更改时会触发。所以preventDefault()return false在这种情况下不起作用。

其次,我尝试设置Ext.tab.Tab.handler属性,当标签被初始化时,但它在点击标签按钮时触发。因此preventDefault()return false不起作用。

ony身体可以帮助吗?如何防止仅使用Ext.tab.TabExt.tab.Bar更改选项卡?

Thx。

回答

1

我认为你可以在标签面板上使用'beforetabchange'事件。

来自sencha文档:http://docs.sencha.com/ext-js/4-0/#!/api/Ext.tab.Panel-event-beforetabchange。 在任何监听器中返回false以取消tabchange。

编辑

也许你可以再延长Ext.tab.Bar组件并通过修改setActiveTab方法注册beforechange事件,我认为这是一个非常简单的修改

setActiveTab: function(tab) { 
     //test the beforechange return 
     if (tab.disabled && me.fireEvent('beforechange', tab) === false) { 
      return; 
     } 
     var me = this; 
     if (me.activeTab) { 
      me.previousTab = me.activeTab; 
      me.activeTab.deactivate(); 
     } 
     tab.activate(); 

     if (me.rendered) { 
      me.layout.layout(); 
      tab.el && tab.el.scrollIntoView(me.layout.getRenderTarget()); 
     } 
     me.activeTab = tab; 
     me.fireEvent('change', me, tab, tab.card); 
    } 
+0

我不使用'Ext.tab.Panel'组成部分,所以我不能够订阅其事件 – 2012-03-28 14:49:24

+0

那么恐怕我得让你失望:) - >从煎茶文档: TabBar由TabPanel在内部使用,通常不需要手动创建。 ...无论如何,你尝试过,然后从选项卡上的beforeactivate事件返回false ... – nscrob 2012-03-28 15:16:35

+0

是的,我看到了这条消息=)我尝试了'beforeactivate' for both:tab和tabbar – 2012-03-28 15:22:46

0

添加在标签面板容器上控制器操作“beforeshow”并禁用监听器。允许标签正常运行,无需点击。

component.down("#tabPanel").tabBar.clearListeners(); 
相关问题