Pergunta

É possível usar o Flex Framework e componentes, sem usar MXML? Eu sei ActionScript muito decentemente, e não se sentir como andar com uma nova linguagem XML apenas para obter alguma UI simples lá. Alguém pode fornecer um exemplo que consiste em um arquivo .as que pode ser compilado (idealmente via FlashDevelop, embora apenas dizendo como fazê-lo com o Flex SDK é ok também) e utiliza o Framework Flex? Por exemplo, apenas mostrando um botão Flex que se abre um alerta seria perfeito.

Se não for possível, alguém pode fornecer um arquivo MXML mínimo que irá inicializar um costume AS classe que, em seguida, tem acesso ao SDK do Flex?

Foi útil?

Solução

Eu fiz uma simples inicialização semelhante ao Borek (veja abaixo). Eu adoraria se livrar do arquivo mxml, mas se eu não tê-lo, eu não obter qualquer um dos temas padrão que vêm com Flex (haloclassic.swc, etc). Alguém sabe como fazer o que Theo sugere e ainda tem os temas padrão aplicado?

Aqui é o meu método de bootstrapping 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");
        }
    }
}

Aqui estão as atualizações necessárias para usá-lo com o 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!");
        }
    }
}

Outras dicas

Este é um aplicativo muito simples que faz apenas o bootstrapping básica em MXML. Este é o 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 é o 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: O abaixo resposta não vai realmente funcionar se você inicializar a biblioteca Flex primeiro. Há um monte de código envolvido para fazer isso. Veja os comentários abaixo, ou outras respostas para mais detalhes.


A classe principal nem sequer tem que estar em MXML, basta criar uma classe que herda de mx.core.Application (que é o que uma classe MXML com um nó <mx:Application> raiz é compilado como de qualquer maneira):

package {

  import mx.core.Application;


  public class MyFancyApplication extends Application {

    // do whatever you want here

  }

}

Além disso, qualquer código ActionScript compilado com o compilador mxmlc - ou mesmo a ferramenta de criação Flash CS3 - pode usar as classes Flex, é apenas uma questão de torná-los disponíveis no classpath (referindo-se ao SWC quadro ao usar mxmlc ou apontando para uma pasta que contém a fonte ao usar). A menos que as herda da classe documento de mx.core.Application que você pode correr em alguns problemas, no entanto, uma vez que algumas coisas no âmbito assumir que este é o caso.

Sim, você só precisa incluir o SWC Flex no seu classpath. Você pode encontrar Flex.SWC no Flex SDK em frameoworks / lib / Flex.SWC

edit: Só mais uma coisa:. Se você estiver usando Flex Builder você pode simplesmente criar um novo projeto ActionScript, que, essencialmente, fazer o mesmo que acima

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top