Comunidad de diseño web y desarrollo en internet

Como utilizar controles del MXML en el archivo Actionscript

Si trabajas con FLEX en proyectos medianos o grandes, muy probablemente acostumbres separar el actionscript del MXML. Si no lo haces, te comento que se recomienda generar dos archivos por módulo, uno con el MXML y otro con el actionscript. En el MXML declaras los controles(tales como datagrid, combobox, panels, etc) y en el archivo actionscript controlas los eventos, procesas información, etc.

Vamos a suponer que en MiVentana.mxml tienes cuatro combobox:

Código :

<?xml version="1.0" encoding="utf-8"?>
<MiVentanaBase xmlns="*" xmlns:mx="http://www.adobe.com/2006/mxml">
   <mx:ComboBox id="combo1" />
   <mx:ComboBox id="combo2" />
   <mx:ComboBox id="combo3" />
   <mx:ComboBox id="combo4" />
   <mx:ComboBox id="combo5" />
</MiVentanaBase>


En MiVentanaBase.as para accesar a los combos, normalmente harias algo como esto:

Código :

package
{
   import mx.containers.VBox;

   public class MiVentanaBase extends VBox
   {

      [Bindable] public var combo1:ComboBox;
      [Bindable] public var combo2:ComboBox;
      [Bindable] public var combo3:ComboBox;
      [Bindable] public var combo4:ComboBox;
      [Bindable] public var combo5:ComboBox;

      public function MiVentanaBase()
      {
         super();
      }
      
   }
}


Bien, pues estar declarando/actualizando en el actionscript los controles que utilizas en el MXML puede llegar a resultar tedioso. Como ese archivo Base, esta "casado" con un view MXML, puedes hacer algo para evitar declarar los controles, simplemente crea en el archibo Base una variable llamada v, y castea el this actual al tipo del MXML y vuala, es todo. De tal forma que ahora quedaría así:

MiVentanaView.mxml

Código :

<?xml version="1.0" encoding="utf-8"?>
<MiVentanaBase xmlns="*" xmlns:mx="http://www.adobe.com/2006/mxml">
   <mx:ComboBox id="combo1" />
   <mx:ComboBox id="combo2" />
   <mx:ComboBox id="combo3" />
   <mx:ComboBox id="combo4" />
   <mx:ComboBox id="combo5" />
</MiVentanaBase>


MiVentanaBase.as

Código :

package
{
   import mx.containers.VBox;
   import mx.controls.ComboBox;

   public class MiVentanaBase extends VBox
   {
      
      [Bindable] public var v:MiVentanaView = MiVentanaView(this); // Here is the magic      
      
      public function MiVentanaBase()
      {
         super();
      }
      
   }
}

En MiVentanaBase.as, para acceder a uno de los combobox, solo tendría que poner:

Código :

v.combo1.selectedIndex = algo;


Saludos! :|

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