Para deixar registrado a solução que implementei com a ajuda Clayton,
Cristian e Luis.

Componente:

<?xml version="1.0" encoding="utf-8"?>
<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:Metadata>
                [Event(name="editarGrupo", type="flash.events.Event")]
                [Event(name="insertGrupo", type="flash.events.Event")]
        </fx:Metadata>
        <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('insertGrupo', true))
                        }
                        
                ]]>
        </fx:Script>
        <s:Button x="89" y="118" label="{labelBtn}" id="btnGrupo" 
click="getAcao()"  />
        <s:TextInput id="descricaoGrupo" x="89" y="43" />
        <s:TextInput id="idGrupo" x="10" y="10" visible="false" />
        <s:Label x="37" y="49" text="Grupos"/>
</s:Panel>

Aplicaçao:
<comp:GrupoComp id="painelCadastroGrupo" x="103" y="10"
labelBtn="Inserir" insertGrupo="inserirGrupo(event)"
                                                        labelpanel="Cadastro" 
editarGrupo="alterarGrupo(event)"/>

Obrigado
[]'s
Marcelo

Em 20 de novembro de 2011 21:55, Clayton <[email protected]> escreveu:
> 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<[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";
>>>>> 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 [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
>>>>> --
>>>>> 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
>>>>
>>>>
>>>>
>>>>
>>>> --
>>>> 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
>>
>>
>> --
>> 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
>> --
>> 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
>
>
>
>
> --
> 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

-- 
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