Um tempo atraz tive problemas, e aprendi que usar o creationPolicy="all" não era viavel, e foi fazendo uma melhor gestao de eventos&funções que consegui driblar esse problema. hoje trabalho bastante com viewstate, e trabalho bastante com show events, recebendo parametro apenas do canvas inicial e etc.
2009/11/21 J.C.Ködel <[email protected]> > Próximo passo agora é desenvolver um datagrid com suporte à paginação ou > linhas virtuais. ;-) > > -------------------------------------------------- > From: "RafaelViana" <[email protected]> > Sent: Saturday, November 21, 2009 10:52 AM > > To: "flexdev" <[email protected]> > Subject: [flexdev] Re: Tela demora para abrir > > > >> Valeu pelas dicas. >> >> Tinha aqui uma tela também com uns 200 itens, que quando era aberto >> piscava na tela pela inicialização lenta. >> Arrumei o creationPolicy para auto e coloquei eventos no >> creationComplete e enterFrame ficou bom.Já tinha até esquecido que >> existia esse creationPolicy rsrs se tornou um pessimo vicio de colocar >> sempre como all. >> Apesar que ainda acho que não seja problemático em telas com 1,2 ou >> até 20~30 itens. (Porém quando sobrar um tempinho vou dar uma revisada >> nas telas) >> >> On 20 nov, 21:28, J.C.Ködel <[email protected]> wrote: >> >>> 200 itens é muito? Tenho um aplicativo com 1,500,00 =P >>> >>> To vendo que muita gente está tendo problemas com a criação atrasada dos >>> componentes no flex, então, vamos lá: >>> >>> Em primeiro lugar, temos que ter consciência de que o Flex é construído >>> de >>> uma forma otimizada, ou seja, ele não vai criar componentes >>> desnecessários >>> nem irá travar em uma operação de I/O (por sua natureza single threaded), >>> por isso as comunicações assíncronas (que, acreditem, são boas). Mesmo >>> tecnologias multi-thread, como Silverlight, ainda operam somente de forma >>> assíncrona (o navegador reclama bastante quando algo prende sua thread, >>> já >>> que o estúpido roda os plug-ins na mesma thread do navegador, e isso é >>> verdade para TODOS eles, não só a caca do IE). >>> >>> O engine do Flex é absurdamente pesado (porém absurdamente poderoso), por >>> isso coisas que não são necessárias em um determinado momento >>> simplesmente >>> não serão apresentadas. >>> >>> O que fazer então? >>> >>> Bom, depende muito de onde você está: >>> >>> 1) View States >>> >>> Imagine que você queira limpar o conteúdo de todos os campos de texto de >>> um >>> state quando você muda pra ele (por exemplo, sair do state atual e voltar >>> ao >>> state de autenticação): para isso existe o evento enterState, que é >>> disparado quando você está entrando no state (ou seja, o currentState >>> mudou). Neste ponto, teus componentes já estarão instanciados e você >>> poderá >>> executar qualquer ação sobre eles alí. >>> >>> Mas, imagine que você possua o seguinte código: >>> >>> currentState = "OutroEstado"; >>> cboMeuCombo.selectedIndex = 0; // Este combo está no state outro estado >>> >>> Isso não vai funcionar (porque cboMeuCombo não foi instanciado ainda, da >>> primeira vez), nem é bom colocar no enterState porque senão este código >>> será >>> executado TODA vez que o state mudar (e nem sempre é isso o que você >>> quer). >>> O que fazer então? >>> >>> currentState = "OutroEstado"; >>> callLater(function():void{cboMeuCombo.selectedIndex = 0;}); >>> >>> Assim, o delegate anônimo será executado durante o próximo quadro e o >>> combo >>> estará criado sem problemas. >>> >>> 2) Tab Navigators, ViewStack, etc. >>> >>> Um outro ponto que dá problemas também são componentes com multi-visões, >>> como abas, viewstack, etc. Quando o componente é criado, ele instancia >>> apenas os filhos da aba ou stack que será imediatamente exibido. Isso >>> significa que uma aba não pode acessar componentes de outra aba (pelo >>> menos >>> da primeira vez), porque eles não foram construídos ainda. >>> >>> CallLater também não pode ser usado aqui, porque você não sabe exatamente >>> quando a aba será mudada (a menos, claro, que esteja explicitamente >>> mudando >>> a aba via código). >>> >>> Um evento interessante aqui é o show, que é disparado quando o Container >>> (Canvas, Box, VBox, etc.) está sendo mostrado. Isso ocorre TODA vez que a >>> outra aba é acionada, então você pode utilizar uma flag do tipo: >>> >>> private var TaInicializado:Boolean = false; >>> >>> E no evento show da segunda aba: >>> >>> if(TaInicializado == false) { TaInicializado = true; Codigo de >>> Inicializacao >>> Aqui } >>> >>> Uma outra solução que uso freqüêntemente é o poder do data binding do >>> Flex: >>> >>> Imagine que você queira alterar o texto de campos de texto que não foram >>> criados ainda: >>> >>> Porque não usar <mx:Text label="{VariavelString}"/> e alterar a >>> VariavelString, ao invés da propriedade label do Text? Desta forma, irá >>> funcionar em todos os casos, não precisa alterar a política de criação e >>> ainda tem a vantagem de poder fazer o data binding em duas vias (ida e >>> volta) e obter os dados para envio para uma função remota, por exemplo, >>> sem >>> ter que ficar checando se o componente existe. >>> >>> Neste caso, é útil uma função presente em todos os componentes do Flex: >>> executeBindings(includeChildren:Boolean). >>> >>> O que esta função faz é "re-bindar" aquele componente e, opcionalmente >>> (se >>> passado true como parâmetro), todos os filhos daquele componente. >>> >>> Flex (felizmente) exige mais um programador do que só um simples >>> desenvolvedor. Pode parecer complicado ou frustrante à princípio mas, >>> acredite, você vai amar o bichin assim que conseguir domesticá-lo ;-) >>> >>> -------------------------------------------------- >>> From: "Taciano.Peruzzo" <[email protected]> >>> Sent: Friday, November 20, 2009 8:17 PM >>> To: "flexdev" <[email protected]> >>> Subject: [flexdev] Tela demora para abrir >>> >>> >>> >>> >>> >>> > Boa noite galera, estou desenvolvendo uma aplicação de administração >>> > de imoveis, e está ocorrendo o seguinte: >>> > Tenho uma tela de cadastro com muitos itens, muitos mesmos uns 200 >>> > +/- , num tabNavigator distribuidos em umas 5 abas, e precisei usar o >>> > creationPolicy="All" para zerar os textInput de dentro dessas abas, >>> > pois estava dando erro nesse lado, só que o tempo de criação dessa >>> > janela aumentou consideravelmente, leva em torno de 5 segundos depois >>> > do click para aparecer e começar a carregar os dados. Gostaria de >>> > saber da lista se tem alguma forma de não usar o creationPolicy, ou de >>> > agilizar a abertura. Tentei colocar um setBusyCursor, mas nao deu >>> > certo, ele só aparece depois da janela, poderia ate ser uma >>> > alternativa para avisar o usuario da demora. Alguém alguma sugestão? >>> > > >>> >>> >>> smime.p7s >>> 6KExibirDownload >>> >> >> >> > --~--~---------~--~----~------------~-------~--~----~ 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 -~----------~----~----~----~------~----~------~--~---
