-------------------------------------------------- From: "RafaelViana" <rfl.vi...@gmail.com> Sent: Saturday, November 21, 2009 10:52 AM To: "flexdev" <flexdev@googlegroups.com> 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 <jcko...@gmail.com> 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áriosnem 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 formaassí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), porisso coisas que não são necessárias em um determinado momento simplesmentenão serão apresentadas. O que fazer então? Bom, depende muito de onde você está: 1) View StatesImagine 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 aostate de autenticação): para isso existe o evento enterState, que é disparado quando você está entrando no state (ou seja, o currentStatemudou). 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, daprimeira 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 comboestará 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. Issosignifica que uma aba não pode acessar componentes de outra aba (pelo menosda primeira vez), porque eles não foram construídos ainda. CallLater também não pode ser usado aqui, porque você não sabe exatamentequando a aba será mudada (a menos, claro, que esteja explicitamente mudandoa 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 InicializacaoAqui }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 evolta) e obter os dados para envio para uma função remota, por exemplo, semter 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 (sepassado 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" <taciano.peru...@gmail.com> Sent: Friday, November 20, 2009 8:17 PM To: "flexdev" <flexdev@googlegroups.com> 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 flexdev@googlegroups.comPara sair da lista, envie um email em branco para flexdev-unsubscr...@googlegroups.comMais opções estão disponíveis em http://groups.google.com/group/flexdev -~----------~----~----~----~------~----~------~--~---
smime.p7s
Description: S/MIME cryptographic signature