2012-03-28 5 views
0

탭 표시 줄을 사용하지 않고 일부 기준에 따라 탭을 변경하지 못하게해야합니다.ExtJS 4 : TabBar를 사용하여 탭을 변경하지 못하도록

ExtJS 문서에서 Ext.tab.Bar에 대해 change 이벤트가 발견되었지만 이미 탭이 변경되면 실행됩니다. 따라서 preventDefault()return false은이 경우 작동하지 않습니다.

두 번째 시도는 탭이 초기화되었을 때 Ext.tab.Tab.handler 속성으로 설정되었지만 탭 단추를 이미 클릭하면 시작됩니다. 따라서 preventDefault()return false도 작동하지 않습니다.

오마이 뉴스가이 문제를 해결할 수 있습니까? Ext.tab.TabExt.tab.Bar 만 사용하여 탭을 변경하지 못하게하려면 어떻게해야합니까?

Thx.

답변

1

탭 패널 자체에서 'beforetabchange'이벤트를 사용할 수 있다고 생각합니다.

발신자 : 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' 구성 요소'사용하지 않는, 그래서 그 이벤트를 구독 할 수 아니에요 –

+0

그럼 내가 :) 당신에게 실망해야 두려워 - 엽차의 문서에서> TabBar는 TabPanel에 의해 내부적으로 사용되며 대개 수동으로 생성 할 필요가 없습니다. ... 어쨌든 탭 바의 beforeactivate 이벤트에서 false를 반환하려고 시도 했습니까? – nscrob

+0

옙,이 메시지를 보았습니다.) 그리고 나는 두 가지 모두에 대해 beforeactivate를 수행했습니다 : tab and tabbar –

0

a를 생각 컨트롤러 동작을 탭 패널 컨테이너에 "beforeshow"하고 리스너를 비활성화합니다. 클릭 가능성없이 탭이 정상적으로 작동 할 수있게합니다.

component.down("#tabPanel").tabBar.clearListeners();