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
