проблема гибкого ButtonBar - PullRequest
0 голосов
/ 04 июля 2010

Я хочу сгенерировать последовательность кнопок на 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 Ответ

1 голос
/ 04 июля 2010

ButtonBar рассматривает элементы в вашем dataProvider как общие объекты.Он не будет искать в этих объектах значения, отличные от метки.То, как работают списочные классы, - это labelField, labelFunction и метод с именем itemToLabel.Я предполагаю, что ButtonBar использует аналогичный подход.

Функция itemToLabel вызывается всякий раз, когда компоненту необходимо найти метку для элемента в вашем dataPRovider.Он не будет смотреть в ваш dataProvider для других настроек, и поэтому свойство enabled в вашем dataProvider не имеет никакого эффекта.

Мне неясно, почему вы хотите отключить кнопки на панели кнопок.Знание этого поможет нам определить, куда поместить код.Использование события updateComplete для ButtonBar будет запускать этот код каждый раз, когда обновляется визуальное отображение компонента, что, вероятно, вам не нужно.

Вы можете запустить этот код на creationComplete, который является одноразовым событием.Но если вам нужны постоянные обновления, это не сработает.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...