2

我有一个小问题,希望对你没有任何影响。:-)

我在 mxml-Form 中有一个标签栏。它看起来像这样:

<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>

现在我有一个问题,我必须在创建标签栏后检查,从哪个状态创建标签栏。如果它是从特定状态创建的,则必须禁用第一个选项卡。

我这样做如下:

public function check():void {

        if(checkstate_){

           tabBar_.getChildAt(0).enabled= false;

        }   
}

不幸的是,它不起作用。

有人可以帮帮我吗?

谢谢!!!!

麦克风

4

1 回答 1

0

在名为. @private_ 该组件在其类层次结构中的某个点进行扩展。NavBarenbaledFieldTabBarNavBar

这是来自 Apache Flex github repo 的代码(包括在内只是为了您可以阅读 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 的建议自行实现。特别要注意发生魔术createNavChildren()的类中的私有方法:NavBar

//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;
}

这是NavBargithub 存储库中包含上述所有代码的类的链接。

于 2013-09-26T20:21:23.333 回答