¿Es posible utilizar Flex Framework/Components sin usar MXML?
actionscript-3 flashdevelop (4)
¿Es posible usar 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.
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?
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>
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);
}
Sí, solo necesita incluir el flex swc en su classpath. Puede encontrar flex.swc en el sdk flexible 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.
Hice un bootstrap simple similar a Borek (ver más abajo). 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í está mi método simplificado de arranque:
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!");
}
}
}
NOTA: La respuesta a continuación no funcionará a menos que primero inicialice la biblioteca Flex. 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, solo crea 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, es solo cuestión de hacer que estén disponibles en el classpath (refiriéndose al marco SWC cuando se usa 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
es posible que se encuentre con algún problema, ya que algunas cosas en el marco asumen que este es el caso.