obrigado pela resposta Fredy. cara, a situação que tenho é um pouco
diferente. comentei no código. o trecho é este:

private function
setarIconesRecursivo(dataProvider:ArrayCollection):void{
        for(var i:uint=0; i<dataProvider.length;i++){
                if(dataProvider[i].icone != null){
                        //disparo um evento customizado com o ítem do tree que 
vai receber
o ícone
                        //foi a forma que encontrei de saber qual
elemento vai receber o ícone dentro do getBitmapData
                        //mas se houver uma maneira mais inteligente
de passar parâmetro para um handler gostaria de saber
                        evento = new EventLoadCustom("customEvent");
                        evento.evtItemTree = dataProvider[i];
                        dispatchEvent(evento);
                        //adiciono um handler para o loader e caggego os bytes 
do bytearray
(dataProvider[i].icone:ByteArray)
                        loader = new Loader();
                        
loader.contentLoaderInfo.addEventListener(Event.COMPLETE,
getBitmapData);
                        loader.loadBytes(dataProvider[i].icone);
                }
                if(dataProvider[i].children != null){
                        
setarIconesRecursivo(ArrayCollection(dataProvider[i].children));
                        return;
                }
        }
}

private function getBitmapData(evt:Event):void{
        var conteudo:* = loader.content;
        bitmapData = new BitmapData(conteudo.width,conteudo.height,true,
0x00000000);
        var matriz:Matrix = new Matrix();
        bitmapData.draw(conteudo, matriz,null,null,null,true);
        //esse RuntimeBitmapAsset.getClass vai retornar o BitmapData como
Class, que é o parâmetro esperado pelo setItemIcon
        var icone:Class = RuntimeBitmapAsset.getClass(bitmapData);
        //agora posso setar o ícone no item do evento disparado
        _menuTree.setItemIcon(evento.evtItemTree, icone, null);
}

o problema é que quando disparo o evento customizado e carrego o
loader a execução não passa para o handler, mas continua no loop, ou
seja, o evento customizado envia outro ítem e o loader carrega outro
ícone e assim sucessivamente até o último elemento do loop. então só
vou conseguir entrar no handler no último ítem do loop por isso
somente o último elemento do tree com ícone vai receber a imagem.
então como resolver isto?


On 18 out, 09:30, Fredy Gadotti <[email protected]> wrote:
> Ele só é assíncrono para chamadas remotas e alguns outros casos especiais.
> Esse código que você mandou é síncrono.
>
> Não seria que você gostaria de fazer?
>
> if (i % 2 == 0){
>    // função
>
> }
>
> Att,
>
> Fredy
>
> 2011/10/18 Leonardo Oliveira <[email protected]>
>
>
>
>
>
>
>
> > eu sei que o flex é assíncrono, portanto se estou em um loop e dentro
> > do loop chamo uma outra função, ele vai terminar o loop primeiro e
> > depois chamar a função. existe uma forma de forçar o processamento
> > síncrono no flex? a situação é esta (apenas exemplificando):
>
> > private function teste():void{
> >     for(var i:uint=0; i<10; i++){
> >          if(i/2==0){
> >               teste2(i); //chamar função teste2 passando o número par
> >          }
> >     }
> > }
>
> > private function teste2(param:uint):void{
> >     //faz alguma coisa com param
> > }
>
> > como se fosse assim:
> > private function teste():void{
> >     for(var i:uint=0; i<10; i++){
> >          if(i/2==0){
> >               //faz alguma coisa com i
> >          }
> >     }
> > }
>
> > --
> > 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 emhttp://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