2008-11-04 25 views
5

Si todo lo que se puede lograr en MXML también se puede lograr en ActionScript y muchas cosas son más fáciles de lograr en ActionScript (bucles, condicionales, etc.) ¿por qué tomarse el tiempo para aprender MXML?¿Por qué debería usar MXML?

Las mejores razones que tengo en este momento son que la estructura del MXML coincide muy bien con la jerarquía visual de los componentes de la interfaz de usuario y que las líneas de código para inicializar la interfaz de usuario se reducen. Por otro lado, las IU del mundo real a menudo son dinámicas, se implementan como una estructura estática simple y luego se completan dinámicamente en función de las condiciones de tiempo de ejecución (en cuyo caso, las actualizaciones de IU están en ActionScript de todos modos). También sería posible reducir el SLOC necesario para ActionScript con la creación de algunos métodos auxiliares.

Respuesta

0

Diseñar elementos de la interfaz de usuario con mxml y el diseñador visual es mucho más fácil que en el código, y menos propenso a errores en mi opinión.

Incluso si la interfaz de usuario cambia dinámicamente, a menudo esto significa el intercambio de elementos de IU predefinidos dentro y fuera.

0

Si usa FlexBuilder, MXML es útil para diseñar una aplicación, ya que FlexBuilder puede leer/escribir en la vista de diseño MXML. También es mucho más fácil implementar estados a través de MXML.

Si no utiliza una herramienta como FlexBuilder que tiene una vista de diseño, entonces puede ser menos útil. Sin embargo, recuerde que Flex4 tiene previsto presentar el nuevo material Thermo, que incluye la capacidad de crear gráficos vectoriales utilizando la notación MXML, y permitirá que MXML se utilice para revestir los componentes de Flex. Es probable que entre en su propio entonces. Tendrás una ventaja en ese punto si ya has aprendido a manejar MXML.

0

¿Está diciendo que va a utilizar el marco Flex, pero está eligiendo si usar MXML o trabajar dinámicamente en AS? Si es así, entonces la principal ventaja de MXML es la integración con la interfaz de diseño. Si tener acceso a la interfaz WYSIWYG no es valioso para usted, entonces puede encontrar que hay poca diferencia entre MXML y AS puro.

Si está preguntando sobre el uso de MXML frente al uso de archivos FLA, entonces esa es una pregunta muy diferente: equivale a "¿por qué debería usar Flex Framework?"

14

Depende de las necesidades de su aplicación, pero generalmente rompo mi diseño en fragmentos visuales y utilizo componentes MXML personalizados para diseñar las áreas principales y componentes de mi aplicación (paneles de datos, cuadros de diálogo, etc.) utilizando componentes personalizados basados ​​en mxml . Luego lo aumentaré con componentes personalizados de ActionScript en los que necesito más flexibilidad visual de la que proporcionan los componentes de diseño incorporados. MXML es útil porque hace que sea extremadamente fácil obtener componentes en el escenario y establecer sus diversas propiedades y configuraciones de estilo.

Tome este ejemplo de dos paneles de acceso idénticos:

En MXML:

<mx:Panel xmlns:mx="http://www.adobe.com/2006/mxml" layout="absolute" width="290" height="148" title="Login"> 
    <mx:Label text="User name:" width="80" textAlign="right" y="8" x="8"/> 
    <mx:Label text="Password:" width="80" textAlign="right" y="38" x="8"/> 
    <mx:TextInput id="txtUsername" maxChars="20" y="8" x="90"/> 
    <mx:TextInput id="txtPassword" displayAsPassword="true" y="38" x="90" maxChars="20"/> 
    <mx:Button x="185" y="68" label="Login" id="btnLogin" click="doLogin()"/> 
</mx:Panel> 

Y en ActionScript:

package 
{ 
    import flash.events.MouseEvent; 

    import mx.containers.Panel; 
    import mx.controls.Button; 
    import mx.controls.Label; 
    import mx.controls.TextInput; 

    public class MyLoginPanel extends Panel 
    { 

     private var _unLabel:Label; 
     private var _passLabel:Label; 
     private var _txtUsername:TextInput; 
     private var _txtPassword:TextInput; 
     private var _btnLogin:Button; 

     public function MyLoginPanel() 
     { 
     } 

     override protected function createChildren():void 
     { 
      super.createChildren(); 

      this.width = 290; 
      this.height = 148; 
      this.title = "Login"; 
      this.layout = "absolute"; 

      _unLabel = new Label(); 
      _unLabel.text = "User Name:"; 
      _unLabel.width = 80; 
      _unLabel.setStyle("textAlign", "right"); 
      _unLabel.move(8, 8); 
      this.addChild(_unLabel); 

      _passLabel = new Label(); 
      _passLabel.text = "Password:"; 
      _passLabel.width = 80; 
      _passLabel.setStyle("textAlign", "right"); 
      _passLabel.move(8, 38); 
      this.addChild(_passLabel); 

      _txtUsername = new TextInput(); 
      _txtUsername.move(90, 8); 
      this.addChild(_txtUsername); 

      _txtPassword = new TextInput(); 
      _txtPassword.move(90, 38); 
      _txtPassword.displayAsPassword = true; 
      this.addChild(_txtPassword); 

      _btnLogin = new Button(); 
      _btnLogin.label = "Login"; 
      _btnLogin.move(185, 68); 
      _btnLogin.addEventListener(MouseEvent.CLICK, doLogin); 
      this.addChild(_btnLogin); 
     }  
    } 
} 

siete líneas de código vs 62. Eso es un ejemplo bastante simple pero, con un poco de suerte, puede ver cómo puede beneficiarse diseñando muchas partes de su aplicación en MXML, ya sea que esté utilizando el modo de diseño en Flex Builder o no.

Sin embargo, una cosa que recomiendo es mantener ActionScript fuera de tus archivos mxml tanto como sea posible. Trate MXML como su vista y separe cualquier funcionalidad pesada en otras clases.A continuación, puede proporcionar propiedades públicas en aquellas clases a las que los controles en sus componentes MXML puedan enlazarse. MXML es un lenguaje de diseño y, en mi experiencia, al final vale la pena usarlo donde tenga sentido y caer en ActionScript siempre que se requiera un levantamiento más pesado.

+0

Iba a decir más o menos lo mismo, pero me ganaste. Las principales ventajas de MXML son 1) brevedad, y 2) equivalencia estructural entre el marcado y el diseño. – benjismith

Cuestiones relacionadas