É uma boa mesmo, utilizo nos meus componentes, nos forms não, pois trabalho
diferente com eles.
[Event(name="name", type="flash.events.Event")]
Fiz o exemplo, com seu código:
Componente:
<fx:Metadata>
[Event(name="editarGrupo", type="flash.events.Event")]
[Event(name="inserirGrupo", type="flash.events.Event")]
</fx:Metadata>
<fx:Script>
<![CDATA[
[Bindable]
public var labelBtn:String;
[Bindable]
public var labelpanel:String;
protected function dispararEventoAlterar():void
{
dispatchEvent(new Event('editarGrupo', true));
}
protected function dispararEventoIncluir():void
{
dispatchEvent(new Event('incluirGrupo', true));
}
private function getAcao():void
{
if(labelBtn == "Alterar")
{
dispararEventoAlterar();
}
else if(labelBtn == "Inserir")
{
dispararEventoIncluir();
}
}
]]>
</fx:Script>
<s:Button x="89" y="118" label="{labelBtn}" id="btnGrupo"
click="getAcao()"/>
Aplicação:
<comp:GrupoComp labelBtn="Inserir" labelpanel="Cadastro"
id="painelCadastroGrupo" inserirGrupo="inserirGrupo"
editarGrupo="alterarGrupo"/>
-----Original Message-----
From: Luis Eduardo
Sent: Sunday, November 20, 2011 4:04 PM
To: flexdev@googlegroups.com
Subject: Re: [flexdev] mudar click do botao que esta em um componente
Eu achei pouco ortodoxo, mas muito efetivo.
Que tal uma pequena melhoria no código, sem atrapalhar o que foi
sugerido pelos colegas:
No mxml do GrupoComp, coloque uma Metadata de Event pra deixar
explicito quais eventos customizados esse componente dispara.
Isso vai te permitir tirar a função de Init() do Application e
fazer algo assim:
<comp:GrupoComp labelBtn="Inserir" labelpanel="Cadastro"
id="painelCadastroGrupo" onInsert="inserirGrupo" onEdit="editarGrupo" />
abraços,
- Luís
Em 20/11/2011 10:24, Marcelo A escreveu:
Eu acho que fiz uma mistura do que vcs falaram e deu certo. Veja se
fiz corretamente.
Na aplicacao eu seto o label do botao(Inserir ou Alterar) do
componente. No componente verifico qual é o label do botao(Inserir ou
Alterar). Para cada situacao eu chamo uma funcao que faz um dispatch.
Na aplicacao chamo uma funcao init que fica escutando esse dispatch.
Veja os codigos abaixo. Será que foi isso que vcs quiseram dizer?
Componente:
<fx:Script>
<![CDATA[
[Bindable]
public var labelBtn;
[Bindable]
public var labelpanel;
private function getAcao():void{
if(labelBtn == "Alterar"){
dispararEventoAlterar(); }else if(labelBtn == "Inserir"){
dispararEventoIncluir();
}
}
private function dispararEventoAlterar():void{
dispatchEvent(new Event('editarGrupo', true))
}
private function dispararEventoIncluir():void{
dispatchEvent(new Event('incluirGrupo', true))
}
]]>
</fx:Script>
<s:Button x="89" y="118" label="{labelBtn}" id="btnGrupo"
click="getAcao()" />
Aplicacao
<comp:GrupoComp labelBtn="Inserir" labelpanel="Cadastro"
id="painelCadastroGrupo" />
private function init():void
{
this.addEventListener("incluirGrupo",inserirGrupo);
this.addEventListener("alterarGrupo",alterarGrupo);
}
Em 20 de novembro de 2011 10:51, Clayton<marquesclayt...@gmail.com>
escreveu:
A forma correta é fazer o click do botão do componente disparar um evento
customizado, desta forma qualquer outro que o utilizar poderá escutar o
evento e executar o método que lhe convier.
Em 20 de novembro de 2011 02:10, Cristian Edson Göhl
<cristian.g...@live.com> escreveu:
Opa Marcelo,
cara tu até poderia fazer algo utilizando assim:
protected function
bMarcelo_clickHandler(event:MouseEvent):void
{
//codigo
}
protected function
bMarcelo_clickHandler2(event:MouseEvent):void
{
//codigo
}
bMarcelo.removeEventListener(MouseEvent.CLICK,
bMarcelo_clickHandler); // Assim você remove um evento.
bMarcelo.addEventListener(MouseEvent.CLICK,
bMarcelo_clickHandler2); // Assim adiciona um evento.
Nesse sentido você conseguiria fazer funcionar, porém teria que ter
cuidado de sempre remover um evento adicionado, para não ficar com mais
de
1.
Não aconselho fazer algo deste tipo.
Use alguma outra verificação para saber o que fazer, talvez até pelo
text
do button,
if (bMarcelo.label == "asd")
{
// Fazer tal coisa.
}
else
{
// tal coisa
}
Assim só precisa uma função, que já pode deixar definida no click pelo
mxml, é mais rápido, menos código, e mais fácil de entender.
Abraço.
-----Original Message----- From: Marcelo A
Sent: Saturday, November 19, 2011 11:51 PM
To: flexdev@googlegroups.com
Subject: [flexdev] mudar click do botao que esta em um componente
Pessoal,
tenho um componente que é um Panel e nele tenho um botao.
Na minha aplicacao chamo esse componente e altero o label do botao por
exemplo. O que eu nao sei é como faço para passar para o click do
botao a function que desejo.
Pois posso ter esse componente Panel em dois momentos diferentes da
minha aplicacao e quero que ele tenha funcionalidades diferentes no
click do botao.
Abaixo coloco o exemplo que estou falando.
Obrigado.
[]'s
Marcelo
Componente:
<s:Panel xmlns:fx="http://ns.adobe.com/mxml/2009"
xmlns:s="library://ns.adobe.com/flex/spark"
xmlns:mx="library://ns.adobe.com/flex/mx"
width="250" height="200" title="{labelpanel}">
<fx:Declarations>
<!-- Place non-visual elements (e.g., services, value objects) here -->
</fx:Declarations>
<fx:Script>
<![CDATA[
[Bindable]
public var labelBtn;
[Bindable]
public var labelpanel;
]]>
</fx:Script>
<s:Button x="89" y="118" label="{labelBtn}" id="btnGrupo" />
<s:TextInput id="descricaoGrupo" x="89" y="43" />
<s:Label x="37" y="49" text="Grupo"/>
</s:Panel>
Aplicacao
<comp:GrupoComp labelBtn="Inserir" labelpanel="Cadastro"
id="painelCadastroGrupo" />
--
Você recebeu esta mensagem porque está inscrito na lista "flexdev"
Para enviar uma mensagem, envie um e-mail para flexdev@googlegroups.com
Para sair da lista, envie um email em branco para
flexdev-unsubscr...@googlegroups.com
Mais opções estão disponíveis em http://groups.google.com/group/flexdev
--
Você recebeu esta mensagem porque está inscrito na lista "flexdev"
Para enviar uma mensagem, envie um e-mail para flexdev@googlegroups.com
Para sair da lista, envie um email em branco para
flexdev-unsubscr...@googlegroups.com
Mais opções estão disponíveis em http://groups.google.com/group/flexdev
--
Clayton Marques Pereira
--
Você recebeu esta mensagem porque está inscrito na lista "flexdev"
Para enviar uma mensagem, envie um e-mail para flexdev@googlegroups.com
Para sair da lista, envie um email em branco para
flexdev-unsubscr...@googlegroups.com
Mais opções estão disponíveis em http://groups.google.com/group/flexdev
--
Você recebeu esta mensagem porque está inscrito na lista "flexdev"
Para enviar uma mensagem, envie um e-mail para flexdev@googlegroups.com
Para sair da lista, envie um email em branco para
flexdev-unsubscr...@googlegroups.com
Mais opções estão disponíveis em http://groups.google.com/group/flexdev
--
Você recebeu esta mensagem porque está inscrito na lista "flexdev"
Para enviar uma mensagem, envie um e-mail para flexdev@googlegroups.com
Para sair da lista, envie um email em branco para
flexdev-unsubscr...@googlegroups.com
Mais opções estão disponíveis em http://groups.google.com/group/flexdev