【问题标题】:How to access a custom ButtonBar button?如何访问自定义 ButtonBar 按钮?
【发布时间】:2013-10-21 21:55:40
【问题描述】:

我创建了一个自定义 Spark ButtonBar。我想在其中显示通知徽章(即显示该选项卡有多少通知的数字),但我不知道如何从外部访问该按钮。

我看过这样的问题:Hide a Button in a ButtonBar

但这似乎不起作用,我返回的对象:

btnBarNav.dataGroup.getElementAt(0);

不是 Button 或我的皮肤的实例,它是“GameMenuBarInnerClass0”。

关于如何最好地将一些数据传递给我的皮肤以显示与按钮相关的数字有什么建议吗?

【问题讨论】:

    标签: apache-flex flex-spark


    【解决方案1】:

    不要尝试直接访问和操作视图(您的按钮)。请改用模型 + 数据绑定。

    创建自定义皮肤

    看起来您已经这样做了,但仅供参考:您需要 ButtonBar 的自定义外观和 ButtonBarButtons 的三个外观:一个用于第一个按钮,一个用于最后一个,一个将应用于所有按钮介于两者之间。

    使用数据提供者的表示模型

    创建一个展示模型,其中包含按钮的标签、可能是图标以及您在按钮中需要的任何其他信息。例如:

    class ButtonModel {
        public var label:String;
        [Bindable]
        public var messageCount:int = 0;
    }
    

    请注意,我将messageCount 设置为可绑定的,以便我们稍后可以绑定到它。

    将这些模型的集合指定为 ButtonBar 的数据提供者

    <s:ButtonBar>
        <s:ArrayList>
            <rs:ButtonModel label="Button 1"/>
            <rs:ButtonModel label="Button 2"/>
        </s:ArrayList>
    </s:ButtonBar>
    

    在自定义皮肤中使用演示属性

    在您的自定义按钮外观中,您现在可以绑定到此演示模型的属性。主机组件 (ButtonBarButton) 有一个属性 data 保存此模型实例。

    <s:Label id="labelDisplay"/>
    <s:Label text="{hostComponent.data.messageCount}"/>
    

    每当您更新模型上的messageCount 属性时,它都会自动反映在按钮中。

    【讨论】:

    • 谢谢!我最初尝试过这样的事情,但无法让它工作,因为 Flex 抱怨 hostComponent 没有属性“数据”。另一个 stackoverflow 问题提示我我的皮肤必须是通用的 而不是
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2011-10-11
    • 2015-06-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-12-23
    • 2018-09-19
    相关资源
    最近更新 更多