2008-09-26 19 views
19

¿Es posible utilizar el marco y los componentes de Flex sin usar MXML? Conozco ActionScript bastante decentemente, y no tengo ganas de jugar con un nuevo lenguaje XML solo para obtener una interfaz de usuario simple allí. ¿Alguien puede proporcionar un ejemplo que consta de un archivo .as que se puede compilar (idealmente a través de FlashDevelop, aunque también es correcto decir cómo hacerlo con el SDK de Flex) y utiliza el Marco Flex? Por ejemplo, simplemente mostrando un botón Flex que aparece abierto, una alerta sería perfecta.Posible usar Flex Framework/Components sin usar MXML?

Si no es posible, ¿alguien puede proporcionar un archivo MXML mínimo que iniciará una clase AS personalizada que luego tendrá acceso al SDK de Flex?

Respuesta

13

Hice un bootstrap simple similar a Borek (ver a continuación). Me encantaría deshacerme del archivo mxml, pero si no lo tengo, no obtendré ninguno de los temas estándar que vienen con Flex (haloclassic.swc, etc.). ¿Alguien sabe cómo hacer lo que Theo sugiere y aún tiene los temas estándar aplicados?

Aquí es mi método de arranque simplificado:

main.mxml

<?xml version="1.0" encoding="utf-8"?> 
<custom:ApplicationClass xmlns:custom="components.*"/> 

ApplicationClass.as

package components { 
    import mx.core.Application; 
    import mx.events.FlexEvent; 
    import flash.events.MouseEvent; 
    import mx.controls.Alert; 
    import mx.controls.Button; 

    public class ApplicationClass extends Application { 
     public function ApplicationClass() { 
      addEventListener (FlexEvent.CREATION_COMPLETE, handleComplete); 
     } 
     private function handleComplete(event : FlexEvent) : void { 
      var button : Button = new Button(); 
      button.label = "My favorite button"; 
      button.styleName="halo" 
      button.addEventListener(MouseEvent.CLICK, handleClick); 
      addChild(button); 
     } 
     private function handleClick(e:MouseEvent):void { 
      Alert.show("You clicked on the button!", "Clickity"); 
     } 
    } 
} 

Estas son las actualizaciones necesarias para utilizarlo con Flex 4:

principal.MXML

<?xml version="1.0" encoding="utf-8"?> 
<local:MyApplication xmlns:fx="http://ns.adobe.com/mxml/2009" xmlns:local="components.*" /> 

MyApplication.as

package components { 
    import flash.events.MouseEvent; 
    import mx.controls.Alert; 
    import mx.events.FlexEvent; 
    import spark.components.Application; 
    import spark.components.Button; 

    public class MyApplication extends Application { 
     public function MyApplication() { 
       addEventListener(FlexEvent.CREATION_COMPLETE, creationHandler); 
     } 
     private function creationHandler(e:FlexEvent):void { 
      var button : Button = new Button(); 
      button.label = "My favorite button"; 
      button.styleName="halo" 
      button.addEventListener(MouseEvent.CLICK, handleClick); 
      addElement(button); 
     } 
     private function handleClick(e:MouseEvent):void { 
      Alert.show("You clicked it!", "Clickity!"); 
     } 
    } 
} 
+0

Genial, parece tan mínimo como puedes obtenerlo, a nivel de mxml. Aceptando su respuesta ya que es un código AS casi puro. – davr

+0

Hermoso, gracias. Con FlashDevelop, incluso tiene una gran cantidad de códigos completados en objetos como "botón". Bonito. Esto no funcionó en el ejemplo de Borek. –

+1

Actualizado para incluir un ejemplo del código necesario para Flex 4. – davr

0

Sí, solo necesita incluir el flex swc en su classpath. Puede encontrar flex.swc en el sdk de flex en frameoworks/lib/flex.swc

editar: Una cosa más: si está utilizando Flex Builder, puede simplemente crear un nuevo proyecto de ActionScript, que esencialmente hará lo mismo como anteriormente.

+0

no funciona bien. Obtendrá varios errores cuando intente utilizar componentes de Flex como Button o DataGrid, etc. – davr

9

Esta es una aplicación muy simple que solo hace el arranque básico en MXML. Este es el MXML:

<?xml version="1.0" encoding="utf-8"?> 
<mx:Application xmlns:mx="http://www.adobe.com/2006/mxml" layout="absolute" creationComplete="onCreationComplete()"> 
    <mx:Script source="Script.as" /> 
</mx:Application> 

Ésta es la Script.as:

import mx.controls.Button; 
import flash.events.MouseEvent; 
import mx.controls.Alert; 
import mx.core.Application; 

private function onCreationComplete() : void { 
    var button : Button = new Button(); 
    button.label = "Click me"; 
    button.addEventListener(MouseEvent.CLICK, function(e : MouseEvent) : void { 
    Alert.show("Clicked"); 
    }); 

    Application.application.addChild(button); 
} 
+0

Esto es bueno, pero desafortunadamente en FlashDevelop no se completa el código, p. "botón". Cualquier forma de habilitar eso? –

7

NOTA: La respuesta más adelante en realidad no funcionará a menos que inicializar la biblioteca Flex primero. Hay mucho código involucrado para hacer eso. Vea los comentarios a continuación u otras respuestas para más detalles.


La clase principal ni siquiera tiene que estar en MXML, basta con crear una clase que hereda de mx.core.Application (que es lo que una clase MXML con un nodo raíz <mx:Application> se compila como de todos modos):

package { 

    import mx.core.Application; 


    public class MyFancyApplication extends Application { 

    // do whatever you want here 

    } 

} 

Además, cualquier código ActionScript compilado con el compilador mxmlc, o incluso la herramienta de creación de Flash CS3, puede usar las clases Flex, solo es cuestión de ponerlas a disposición en el classpath (consulte el marco SWC al usar mxmlc o apuntando a una carpeta que contiene la fuente cuando se usa cualquiera). A menos que la clase de documento herede de mx.core.Application, puede que se encuentre con algún problema, ya que algunas cosas en el marco asumen que este es el caso.

+0

Hmm ... Fui a probar esto, y un simple "Hola mundo" recibe toneladas de errores en tiempo de ejecución. ¿Hay algún tipo de inicialización que deba hacer u otras clases específicas que deba incluir? – davr

+0

Es muy fácil de descubrir, simplemente agregue -keep-generated-actionscript a los indicadores del compilador y compile una clase MXML que herede de la aplicación. El compilador crea un directorio llamado "generado" donde puede encontrar el código de ActionScript generado. Es un poco más complicado que el anterior, es cierto. – Theo

Cuestiones relacionadas