Flex ButtonBar 问题

发布于 2024-09-07 22:59:06 字数 1120 浏览 1 评论 0原文

我想在 ButtonBar 上生成一个带有一些禁用按钮的按钮序列:

<mx:Script>
        <![CDATA[
            import mx.collections.ArrayCollection;

            [Bindable]
            public var nav:ArrayCollection=new ArrayCollection();

            ...

            function initApp():void
            {
                nav.removeAll();

                for(var i:uint=0;i<navSize;i++)
                {
                nav.addItem({label: i });
                }

                nav.addItem({label: "Last", enabled:false});

            }
        ]]>
    </mx:Script>                  
...
<mx:ButtonBar id="btnBar" dataProvider="{nav}"/>

但为什么最后一个按钮仍然启用?

UPD:我通过添加 updateComple 事件处理程序找到了解决方案:

function upd()
            {
                trace("upd()");
                for (var i:int=0; i < btnBar.numChildren; i++)
                {
                    if ([condition])
                    {
                        Button(btnBar.getChildAt(i)).enabled=false;
                    }
                }
            }

有人有更好的解决方案吗?

I want to generate a button sequence on ButtonBar with some disabled buttons:

<mx:Script>
        <![CDATA[
            import mx.collections.ArrayCollection;

            [Bindable]
            public var nav:ArrayCollection=new ArrayCollection();

            ...

            function initApp():void
            {
                nav.removeAll();

                for(var i:uint=0;i<navSize;i++)
                {
                nav.addItem({label: i });
                }

                nav.addItem({label: "Last", enabled:false});

            }
        ]]>
    </mx:Script>                  
...
<mx:ButtonBar id="btnBar" dataProvider="{nav}"/>

but why the last button is still enabled?

UPD: I found solution by adding updateComple event handler:

function upd()
            {
                trace("upd()");
                for (var i:int=0; i < btnBar.numChildren; i++)
                {
                    if ([condition])
                    {
                        Button(btnBar.getChildAt(i)).enabled=false;
                    }
                }
            }

Anybody have better solution?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

屋顶上的小猫咪 2024-09-14 22:59:06

ButtonBar 将 dataProvider 中的项目视为通用对象。它不会在这些对象中查找除标签之外的值。列表类的工作方式是有一个 labelField、一个 labelFunction 和一个名为 itemToLabel 的方法。我假设 ButtonBar 使用类似的方法。

每当组件需要从 dataPROvider 中的项目中查找标签时,就会调用 itemToLabel 函数。它不会查看您的 dataProvider 中的其他设置,这就是为什么 dataProvider 中的启用属性不起作用的原因。

我不清楚为什么要禁用 ButtonBar 中的按钮。了解这一点将有助于我们指导您将代码放在哪里。使用 ButtonBar 的 updateComplete 事件将在每次更新组件的视觉显示时运行该代码,但您可能不希望这样做。

您可以在creationComplete 上运行此代码,这是一次性事件。但是,如果您需要不断更新,这就行不通了。

The ButtonBar considers items in your dataProvider as generic objects. It will not look into those objects for values other than label. The way that list classes work is there is a labelField, a labelFunction, and a method named itemToLabel. I assume that the ButtonBar uses a similar approach.

The itemToLabel function is called whenever the component needs to find the label from the item in your dataPRovider. It will not look into your dataProvider for other settings and that is why the enabled property in your dataProvider has no effect.

I'm unclear exactly why you want to disable buttons in the ButtonBar. Knowing that would help us give you direction on where to put the code. Using the ButtonBar's updateComplete event will run that code every time the component's visual display is updated, which you probably don't want.

You can run this code on creationComplete, which is a one time event. But, if you need constant updates this would not work.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文