Evento de um botão em um componente customizado!

Pessoal, estou começando com flex, utilizando flex 4.

Eu quero criar um botão SALVAR, genérico, como um Component, eu já criei, o problema agora é tratar o evento “clique”;

Veja bem, eu tenho uma function que exibe um Alert quando clico no botao, está funcionando, mas acontece que eu quero a ação deste botão personalizada, quero utilizar o mesmo botão porem em lugares diferentes, como faço para conseguir esta proeza? Resumindo, como personalizo o evento “click” deste botão em cada tela que eu utlizá-lo?

Obrigado.

  1. Crie seu próprio evento extendendo de FlexEvent
  2. Crie seu próprio botão extendendo de Button, colocando um listener par ao click. Nesse click, vc despacha seu evento.

Pra ficar bonite, vc pode adicionar um metadado para poder criar seus listener inline, e quando alguém dar o Ctrl+espaço do Flash Builder, vai conseguir ver que seu botão lança seu evento personalizado.

Vou fazer um exemplo e posto aki. Eqto isso, vc pode ler: http://help.adobe.com/en_US/flex/using/WS2db454920e96a9e51e63e3d11c0bf67fe7-7ffd.html

Voltei:

Evento customizado:

[code]package {
import mx.events.FlexEvent;

public class MyEvent extends FlexEvent {
	static public const HELLO_WORLD:String="helloWorld"
	public var message:String;

	public function MyEvent(type:String,message:String,bubbles:Boolean=true,cancelable:Boolean=true) {
		super(type,bubbles,cancelable);
		this.message=message;
	}
}

}[/code]

Botão que lança o evento:

[code]package {
import flash.events.MouseEvent;
import spark.components.Button;

[Event(name="helloWorld",type="MyEvent")]
public class MyButton extends Button {
	public function MyButton() {
		super();
		addEventListener(MouseEvent.CLICK,dispacharMyEvent);
	}

	protected function dispacharMyEvent(event:MouseEvent):void {
		dispatchEvent(new MyEvent(MyEvent.HELLO_WORLD,"Tchau Mundo"));
	}
}

}[/code]

Aplicação para teste:

[code]<?xml version="1.0" encoding="utf-8"?>
<s:Application xmlns:fx="http://ns.adobe.com/mxml/2009"
xmlns:s=“library://ns.adobe.com/flex/spark"
xmlns:mx=“library://ns.adobe.com/flex/mx"
xmlns:local=”*”>
fx:Script
<![CDATA[
import mx.controls.Alert;

		protected function mybutton1_helloWorldHandler(event:MyEvent):void {
			Alert.show(event.message);
		}
	]]>
</fx:Script>
<fx:Declarations>
	<!-- Place non-visual elements (e.g., services, value objects) here -->
</fx:Declarations>
<local:MyButton helloWorld="mybutton1_helloWorldHandler(event)" label="Oi Mundo">
</local:MyButton>

</s:Application>
[/code]

Repara no metadado [Event(name=“helloWorld”,type=“MyEvent”)]. Ele serve pra mostrar que seu botão lança o evento helloWorld. Experimente crtl+spaço no MyButton no Flash Builder que vc verá escrito helloWorld. Assim facilita a vida de quem for usar seu componente. Caso contrário ele vai ter que adivinhar que seu componente lança seu evento, e não vai poder adicionar o Listener no próprio MXML, como eu fiz.

Precisando de um curso em Flex, dê uma olhada na Nuccitec. Eu dou aula lá.

No blog da empresa também eu coloquei algumas coisas interessantes, como validadores de CPF e CNPJ e um transformador semiautomático de classes Java para Flex para sua camada DTO.

Em breve postarei sobre um framework que fiz para integrar Flex com o Google App Engine

[]s

Cara, valeu pela ajuda, pode ter certeza que me ajudou muito!

Estive olhando o blog que voce recomendou (da empresa onde voce trabalha) e achei bem interessante os posts. Com certeza frequentarei mais para conhecer melhor o trabalho de voces. obrigado pela ajuda!

Está certo, e agradeço se puder divulgar também.

Recomendo também dar uma boa estudada em eventos. O ActionScript é muito voltado a eles e conhecer profundamente te economiza umas boas horas, ou até dias, de debug.

[]s.