2009-05-05 3 views
1

Я новичок в flex. Мне нужно отключить некоторые вкладки на гибкой вкладке, указанной по конфигурации. У меня возникают проблемы с итерацией по вкладкам в панели вкладок. Если я использую команду getChildAt(), она не отключает кнопку вкладки, а содержимое этой кнопки вкладки, поэтому ее нет.Как перебирать вкладки в flex tabbar

Спасибо и уважение, Мохит Ранка

ответ

3

Прося о коде, всегда после минимального тестирования. getChildAt() будет работать, так что с вашим кодом происходит что-то еще.

<mx:Script> 
    <![CDATA[ 
     import mx.events.ItemClickEvent; 
     import mx.controls.tabBarClasses.Tab; 
     private function clickTab(event:ItemClickEvent):void { 
      var target:TabBar = event.currentTarget as TabBar; 
      var currTab:Tab; 
      var parity:int = event.index & 1; 
      /* disable all tabs at indices w/ same parity as clicked tab; 
       enable tabs of opposite parity. 
      */ 
      for (var i=0; i<target.numChildren; ++i) { 
       currTab = target.getChildAt(i) as Tab; 
       currTab.enabled = (i&1)^parity; 
      } 
     } 
    ]]> 
</mx:Script> 

<mx:TabBar id="someTabs" itemClick="clickTab(event)"> 
    <mx:dataProvider> 
     <mx:String>Foo</mx:String> 
     <mx:String>Bar</mx:String> 
     <mx:String>Baz</mx:String> 
     <mx:String>Bam</mx:String> 
    </mx:dataProvider> 
</mx:TabBar> 
0

почему бы не использовать связываемый с конфигурацией?

что-то вроде

enabled="{yourConfiguration.lastResult.enabled}" 
+0

потому что требование более сложное, чем это. узкое место - я не знаю, как перебирать вкладки в панели вкладок. –

0

Для тех, кто хочет получить рабочий ответ для Flex 4.5 (возможно, также Flex 4). Наконец я понял решение. Мне кажется, что это взломать, но Adobe не отвечает на звонок и работает для меня. Вот упрощенный пример.

<!-- component that has the the TabBar in it... --> 

<fx:Script> 
    <![CDATA[ 
//imports here 

import mx.core.UIComponent; 

//imports 

private function setTabEnabled(index:int,enabled:Boolean):void{ 
    var theTab:UIComponent = theTabBar.dataGroup.getElementAt(index) as UIComponent; 
    if(theTab){theTab.enabled = enabled;} 
} 
]]> 
</fx:Script> 

<s:TabBar id="theTabBar" 
    dataProvider="{viewStack}"/> 

<mx:ViewStack id="viewStack"> 
    <s:NavigatorContent label="0th Tab"> 
     <!-- ...Content --> 
    </s:NavigatorContent> 
    <s:NavigatorContent label="1st Tab"> 
     <!-- ...Content --> 
    </s:NavigatorContent> 
    <s:NavigatorContent label="2nd Tab"> 
     <!-- ...Content --> 
    </s:NavigatorContent> 
</mx:ViewStack> 

<!-- rest of the component that has the the TabBar in it... --> 

Тогда вы просто позвоните setTabEnabled(theTabIndex,trueFalse) в обработчике событий, связанных с любой решает, почему вкладка, или нет, включен.

I должен расширить TabBar, чтобы поддержать это, но я уже потратил достаточно времени, пытаясь понять это.

Happy Coding = D

Смежные вопросы