2012-03-28 49 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(); 
相關問題