2013-09-25 44 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或复制此功能的实现。干杯! –