Pra jogar mais um pouco da força do Flex pode-se aplicar junto a isso
state, já que o seu componente está em mxml.
Você poderia declarar dois states, mais ou menos assim, me desculpem se
escrever errado, é que estou fazendo este código agora e direto no gmail.

<states>
   <State name="inserir"/>
   <State name="alterar"/>
</states>

<s:Button x="89" y="118" label.inserir="Inserir"
label.alterar="Alterar" id="btnGrupo"
click.inserir="dispararEventoIncluir()" click.inserir="
dispararEventoAlterar()"/>

Desta forma não é necessário informar o label, apenas altera o state
conforme a necessidade, e também não é preciso do método getAcao para
executar um if.
Métodos como o getAcao, no meu entendimento, devem ser evitados pois
somente fazem escolhas com if e comparando strings, e nem mesmo utiliza uma
constante, isso abre a possibilidade de o desenvolvedor cometer erros.

Bom, isso é apenas um perfeccionismo meu.

Em 20 de novembro de 2011 17:59, Cristian Edson Göhl <[email protected]
> escreveu:

> É 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: [email protected]
> 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<marquesclayton1@gmail.**com<[email protected]>>
>> 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
>>> <[email protected]>  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: [email protected]
>>>> 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<http://ns.adobe.com/mxml/2009>
>>>> "
>>>> xmlns:s="library://ns.adobe.**com/flex/spark<http://ns.adobe.com/flex/spark>
>>>> "
>>>> xmlns:mx="library://ns.adobe.**com/flex/mx<http://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 [email protected]
>>>> Para sair da lista, envie um email em branco para
>>>> flexdev-unsubscribe@**googlegroups.com<[email protected]>
>>>> Mais opções estão disponíveis em http://groups.google.com/**
>>>> group/flexdev <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 [email protected]
>>>> Para sair da lista, envie um email em branco para
>>>> flexdev-unsubscribe@**googlegroups.com<[email protected]>
>>>> Mais opções estão disponíveis em http://groups.google.com/**
>>>> group/flexdev <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 [email protected]
>>> Para sair da lista, envie um email em branco para
>>> flexdev-unsubscribe@**googlegroups.com<[email protected]>
>>> Mais opções estão disponíveis em http://groups.google.com/**
>>> group/flexdev <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 [email protected]
> Para sair da lista, envie um email em branco para flexdev-unsubscribe@**
> googlegroups.com <[email protected]>
> Mais opções estão disponíveis em 
> http://groups.google.com/**group/flexdev<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 [email protected]
> Para sair da lista, envie um email em branco para flexdev-unsubscribe@**
> googlegroups.com <[email protected]>
> Mais opções estão disponíveis em 
> http://groups.google.com/**group/flexdev<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 [email protected]
Para sair da lista, envie um email em branco para 
[email protected]
Mais opções estão disponíveis em http://groups.google.com/group/flexdev

Responder a