Comunidad de diseño web y desarrollo en internet online

Cómo deshabilitar un botón de un ToggleButtonBar en Flex

Un problema que nos encontramos al crear una aplicación en Flex es que el componente ToogleButtonBar no tiene un método para deshabilitar los botones.

¿Cómo podemos solucionar esto? Fácil, accedemos a la instancia del botón interna dentro del displaylist y la deshabilitamos:

Código :

Button(barra.getChildAt(0)).enabled = false


Esto es debido a que el componente ToggleButtonBar de Flex tiene una particularidad: no expone los botones en los métodos de su clase y recibe simplemente strings para crearlos. Se le puede dar estilo a los botones, pero hay un problema si por algún motivo queremos deshabilitarlos ... no tenemos un método para hacerlo. He aquí un simple script de botones:

Código :

<mx:ToggleButtonBar itemClick="clickHandler(event)" id="barra" x="54" y="26">
<mx:String>Video</mx:String>
<mx:String>Documents</mx:String>
<mx:String>Board</mx:String>
</mx:ToggleButtonBar>




Si bien el contenido son strings, al crearse el componente se crean botones. No podemos especificar un click directamente en el MXML, pero en la función clickHandler podemos distinguir las etiquetas y hacer algo en función de ellas, muestro aquí como ver la etiqueta:

Código :

private function clickHandler(event:ItemClickEvent):void{
trace("Clickado: "+event.label)
}


Pero bajo determinadas condiciones, puede que necesitemos deshablitar algún botón ... pero leyendo la documentación no encontramos métodos para hacerlo. La primera sospecha es que los botones se encuentran en el displayList de la barra ... para comprobarlo usamos un for ... in para trazar los hijos (podemos llamar la función en el creationComplete del ToogleButtonBar)

Código :

private function init():void{
for(var i:Number = 0; i<barra.numChildren; i++) trace(barra.getChildAt(i))
}


La salida es algo así:

salida :

toogleButtonExample0.barra.ButtonBarButton5
toogleButtonExample0.barra.ButtonBarButton7
toogleButtonExample0.barra.ButtonBarButton9


Bingo, tenemos nuestros botones allí. Luego intentamos deshabilitar por ejemplo los dos primeros cambiando la función init:

Código :

private function init():void{
Button(barra.getChildAt(0)).enabled = false
Button(barra.getChildAt(1)).enabled = false
}


El cast a Button es para que el compilador no marque error al poner el enabled. Aquí el resultado:



Una solución simple para un problema relativamente común.

Jorge

¿Sabes SQL? ¿No-SQL? Aprende MySQL, PostgreSQL, MongoDB, Redis y más con el Curso Profesional de Bases de Datos que empieza el martes, en vivo.

Publica tu comentario

o puedes...

¿Estás registrado en Cristalab y quieres
publicar tu URL y avatar?

¿No estás registrado aún pero quieres hacerlo antes de publicar tu comentario?

Registrate