O que fizeste não é de todo errado, mas implica que os componentes saibam demasiada info uns dos outros.
O ideal é:

- Não usares a classe Event, mas sim estenderes a classe Event (PageEvent, por exemplo);
- Adicionares a propriedade page:Number a essa classe, e se quiseres para simplificar a propriedade page ao construtor dessa classe;
- Lançares o evento PageEvent com a pagina certa preenchida;
- Apanhares o PageEvent, e retirares a pagina do evento.

O Custom Event pode ser criado assim:

public class PageEvent extends Event
{
    public static const CHANGE:String="change";
    public var page:Number;
   
    public function PageEvent(page:Number, type:String, bubbles:Boolean=false, cancelable:Boolean=false)
    {
       this.page=page;
       super(type, bubbles, cancelable);
    }
   
}

Depois lanças o evento assim:

 <comp:controlBar gotoPage="gotoPage(new PageEvent(controlBar.selectedIndex, PageEvent.CHANGE))" id="controlBar"/>

Mudas a metadata para:

[Event(name="change", type="o.meu.package.PageEvent")]

E no handler que apanha o evento, acedes à pagina assim:

                   public function pageChangeHandler(ev:PageEvent):void{
                            var selectedPage:int = ev.page;
                   }

Mais info:

http://www.riapt.org/2008/07/13/utilizacao-de-custom-events-para-transportar-informacao-entre-componentes-fracamente-acoplados/

:)

João Saleiro

CTO @ Webfuel
Adobe Community Expert
Co-founder of the Portuguese RIA Community


View João Saleiro's profile on LinkedIn

rui wrote:
Boa tarde!

Pessoal tenho uma duvida estupida! estou completamente em branco :p

É assim, eu tenho um componente, e dentro desse componente tenho 
metadatas com eventos.
depois na aplicação quando clico num botao dentro do componente é 
disparado o evento e eu chamo a função... até aqui  tudo bem..
Mas não estou a ver como é que envio informaçao do target que clicou... 
na aplicaçao o meu target é o componente....

E eu estou a disparar um evento no change de uma tilelist... e preciso 
de saber o selectedItem ou currentIndex


Entao em resumo tenho no componente:

<mx:Canvas xmlns:mx="http://www.adobe.com/2006/mxml">
    <mx:Metadata>
            [Event(name="gotoPage", type="flash.events.Event")]
    </mx:Metadata>
    <mx:Script>
        <![CDATA[
             private var eventGoToPage:Event = new Event("gotoPage");
        ]]>
    </mx:Script>
    <mx:TileList  change="dispatchEvent(eventGoToPage)" id="pageList"/>
</mx:Canvas>

E depois na aplicação tenho:
<mx:WindowedApplication xmlns:mx="http://www.adobe.com/2006/mxml"  
xmlns:comp="componentes.main.*"/>
    <mx:Script>
        <![CDATA[
                   public function gotoPage(goto:Event):void{
                            /// O meu goto Event refere-se ao componente 
e não ao tilelist do componente...
                            /// Pra encontrar o selectedIndex fiz assim:
                            var selectedPage:int = 
controlBar.pageList.selectedIndex;
                   }
        ]]>
    </mx:Script>
    <comp:controlBar gotoPage="gotoPage(event)" id="controlBar"/>
</mx:WindowedApplication>

Será a melhor maneira!!!??!!!???

p.s- Não se esqueçam de dar uma olhadela ao http://adigitalbook.com e 
opinem...

--~--~---------~--~----~------------~-------~--~----~
Recebeu esta mensagem porque está inscrito em Grupo "Mailing List da Comunidade Portuguesa de Desenvolvimento de RIAs - www.riapt.org" do Grupos Google.
 Para enviar mensagens para este grupo, envie um email para [email protected]
 Para anular a inscrição neste grupo, envie um email para [EMAIL PROTECTED]
 Para mais opções, visite este grupo em http://groups.google.com/group/riapt?hl=pt-PT
-~----------~----~----~----~------~----~------~--~---


  

Responder a