Pregunta

¿Es posible usar el Marco y los Componentes Flex, sin usar MXML? Conozco ActionScript bastante decente, y no tengo ganas de perder el tiempo con un nuevo lenguaje XML solo para obtener una interfaz de usuario simple allí. ¿Alguien puede proporcionar un ejemplo que consista en un archivo .as que se pueda compilar (idealmente a través de FlashDevelop, aunque simplemente decir cómo hacerlo con el SDK de Flex también está bien) y usar Flex Framework? Por ejemplo, simplemente mostrar un botón Flex que abre una alerta sería perfecto.

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?

¿Fue útil?

Solución

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

Aquí está 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");
        }
    }
}

Aquí están las actualizaciones necesarias para usarlo con Flex 4:

main.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!");
        }
    }
}

Otros consejos

Esta es una aplicación muy simple que solo realiza 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>

Este es el 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);
}

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


La clase principal ni siquiera tiene que estar en MXML, solo cree una clase que herede de mx.core.Application (que es como se compila una clase MXML con un nodo raíz <mx:Application>):

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 autoría Flash CS3, puede usar las clases Flex, solo es cuestión de hacerlas disponibles en el classpath (refiriéndose al marco SWC cuando usando <=> o apuntando a una carpeta que contiene la fuente cuando se usa). Sin embargo, a menos que la clase de documento herede de <=>, podría tener algunos problemas, ya que algunas cosas en el marco suponen que este es el caso.

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

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

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top