flex ButtonBar问题

时间:2010-07-03 21:13:57

标签: flex flex3

我想在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;
                    }
                }
            }

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

1 个答案:

答案 0 :(得分:1)

ButtonBar将dataProvider中的项目视为通用对象。除了label之外,它不会查看这些对象的值。列表类的工作方式是labelField,labelFunction和名为itemToLabel的方法。我假设ButtonBar使用类似的方法。

只要组件需要从dataPRovider中的项目中查找标签,就会调用itemToLabel函数。它不会查看dataProvider中的其他设置,这就是dataProvider中enabled属性无效的原因。

我不清楚为什么要禁用ButtonBar中的按钮。知道这将有助于我们指导您放置代码的位置。使用ButtonBar的updateComplete事件将在每次更新组件的可视显示时运行该代码,这可能是您不想要的。

您可以在creationComplete上运行此代码,这是一次性事件。但是,如果您需要不断更新,这将无法正常工作。