2013-09-25 43 views
2

我有一個小問題,希望對您沒有幫助。 :-)禁用TabBar中的選項卡

我在mxml-Form中有一個tabbar。它看起來像這樣:

<mx:TabBar id="tabBar_" itemClick="clickEvt(event);" selectedIndex="1" creationComplete="check()"> 
    <mx:dataProvider> 
     <mx:Object label="Components" data="{ComponentTabOverview}"/> 
     <mx:Object label="Products" data="{ProductTabOverview}"/> 
    </mx:dataProvider> 
</mx:TabBar> 

現在我有問題,我必須在創建tabbar後,從哪個狀態創建tabbar檢查。 如果它是從特定狀態創建的,則必須禁用第一個選項卡。

我做了如下:

public function check():void { 

     if(checkstate_){ 

      tabBar_.getChildAt(0).enabled= false; 

     } 
} 

遺憾的是它不工作。

有人可以幫我嗎?

謝謝!

邁克

+0

看起來好像沒有直接的解決方案,您可能需要擴展標籤欄並覆蓋數據提供程序屬性。你的數據提供者對象將變成如下所示。 現在您必須重寫updateDisplayList/commitProperties以啓用或禁用子選項卡按鈕。我現在沒有安裝flex,否則我會通過代碼給你提供解決方案,但是上面的desc應該讓你開始。 – Zeus

回答

0

好像有一個未公開的(它標誌着ASDOCs @private)在名爲enbaledFieldNavBar組件屬性。 TabBar組件在其類層次結構中的某個點處延伸NavBar

下面是來自Apache的Flex GitHub庫的代碼(只是包含,所以你可以閱讀ASDoc註釋):

/** 
* @private 
* Storage for the enabled property. 
*/ 
private var _enabledField:String = "enabled"; 

[Bindable("enabledFieldChanged")] 
[Inspectable(category="Data")] 

/** 
* Name of the the field in the <code>dataProvider</code> object 
* to use as the enabled label. 
* 
* @default "enabled" 
* 
* @langversion 3.0 
* @playerversion Flash 11.1 
* @playerversion AIR 3.4 
* @productversion Flex 4.10 
*/ 
public function get enabledField():String 
{ 
    return _enabledField; 
} 

所以理論上(我沒有的Flex安裝其一),如果在元素您的dataProvider有一個名爲enabled的屬性,您可以禁用TabBar中的單個按鈕。

或者,如果您想使用dataProvider元素中的其他字段來指示該按鈕應該被啓用/禁用,您可以在enableField屬性上設置一個新值。

該警告似乎是,ASDOC稱這是第一次包含在Flex 4.10中。但我認爲這很奇怪,因爲這是一個較老的MX組件。但是,這可能是這個屬性確實是在Flex 4.10中添加的。

如果這是真的,這只是在Flex 4.10中,那麼你可以複製代碼的各個位並按照@zeus的建議自行實現。特別記下了NavBar類神奇在哪裏發生的私有方法createNavChildren()的:

//Check for enabled field and assign it to the individual button if it exists. 
if (_enabledField != "" && item.hasOwnProperty(_enabledField) == true) 
{ 
    navItem.enabled = Boolean(item[_enabledField]); 
} 
else 
{ 
    navItem.enabled = enabled; 
} 

Here is a linkNavBar類在具有以上所有的代碼GitHub的回購。

+0

這是Apache Flex 4.10發行版的一部分。請參閱https://issues.apache。org/jira/browse/FLEX-14522 –

+0

@JustinMclean感謝您的解釋!我誤解了ASDOC,'enableField'並不是未公開的代碼......我猜測OP將不得不升級到Flex 4.10或複製此功能的實現。乾杯! –