Olá, fiz algumas dessas alterações, e o componente já voltou a funcionar parcialmente. Ele renderiza agora uma boa quantidade de dados rapidamente 5000+ Só que agora deve estar com algum problema na updateDisplayList que não está pintando as cores corretamente, vou dar uma verificada.
Muito obrigado, o problema original pelo menos foi resolvido! Abraço, Fredy. 2009/12/8 fabiophx <[email protected]> > > Fredy, > *private function createHeaders():void {* > * _stragety.width = 50; // *valores ficticios > * _strategy.daysGap = 365; // *valores ficticios > * _strategy.view = this;* > * _strategy.createHeaders(); * > *}* > > Pelo q vi está entrando em loop devido a última linha: > _strategy.createHeaders();. > Qd outras propriedades devem ser setadas qd uma for setada, o melhor > lugar é q fiquem no commitProperties. Nos sets o mais adequado é só > setar um valor outros processos devem ser postergados para o > commitProperties ou updateDisplayList. > > private function set strategy(value:IStrategy):void { > _stragety = value; > stragetyChanged = true; > invalidadeProperties(); > } > > override protected function commitProperties():void { > super.commitProperties(); > > if (stragetyChanged) { > stragetyChanged = false; > createHeaders(); > } > } > > []s > Fabio da Silva > http://fabiophx.blogspot.com/ > > On 8 dez, 08:45, Fredy Gadotti <[email protected]> wrote: > > Olá pessoal, > > > > estava refatorando meu código pois ele estava começando a ficar muito > > horrível, ai fui aplicar o padrão Strategy e meu código começou a dar um > > erro que nunca tinha visto antes. > > E procurando no Google, tinha apenas duas páginas comentando sobre isso, > e > > nenhuma foi de real ajuda. > > > > Bom, o que fiz para simular o erro. > > > > Eu criei, uma interface com os métodos que eu precisava. > > Na classe onde ia aplicar a estratégia eu criei uma variável do tipo da > > interface e criei um setter para instanciar a classe concreta que aplica > > minha estratégia. > > > > Mais ou menos assim: > > > > *var _strategy:IStrategy;* > > * > > * > > *private function set strategy(value:IStrategy):void {* > > * _stragety = value;* > > * > > * > > * createHeaders(); //* talvez o erro seja aqui, mas não > > tenho certeza, será que fica muito pesado chamar dentro do setter? > deveria > > fazer como? *creationComplete?* > > *}* > > * > > * > > *private function createHeaders():void {* > > * _stragety.width = 50; // *valores ficticios > > * _strategy.daysGap = 365; // *valores ficticios > > * _strategy.view = this;* > > * _strategy.createHeaders(); * > > *}* > > > > ai ele vai chamar uma das classes concretas que tem o createHeaders() e > ele > > faz um monte de calculo para criar meus cabeçalhos. > > E logo depois de chamar a updateDisplayList, ele dá o pau. > > > > Antes de refatorar, eu criava tudo dinamicamente uma coleção de 3000 > objetos > > e não dava problema, e todo o código ficava dentro de uma classe com if e > > else encadeados. Simplesmente encapsulei a lógica, e agora mesmo com uma > > coleção de dados pequena e ele dá o erro, com certa de 20 objetos. > > > > *Segue o stack trace:* > > > > Error: Error #1502: Um script foi executado por mais tempo que o período > > limite padrão de 15 segundos. > > at > > > mx.managers.layoutClasses::PriorityQueue/removeSmallestChild()[E:\dev\3.0.x\frameworks\projects\framework\src\mx\managers\layoutClasses\PriorityQueue.as:214] > > at > > > mx.managers::LayoutManager/validateClient()[E:\dev\3.0.x\frameworks\projects\framework\src\mx\managers\LayoutManager.as:895] > > at > > > mx.core::UIComponent/validateNow()[E:\dev\3.0.x\frameworks\projects\framework\src\mx\core\UIComponent.as:5550] > > at > > > mx.core::Container/createOrDestroyScrollbars()[E:\dev\3.0.x\frameworks\projects\framework\src\mx\core\Container.as:4481] > > at > > > mx.core::Container/createScrollbarsIfNeeded()[E:\dev\3.0.x\frameworks\projects\framework\src\mx\core\Container.as:4349] > > at > > > mx.core::Container/createContentPaneAndScrollbarsIfNeeded()[E:\dev\3.0.x\frameworks\projects\framework\src\mx\core\Container.as:4165] > > at > > > mx.core::Container/validateDisplayList()[E:\dev\3.0.x\frameworks\projects\framework\src\mx\core\Container.as:2702] > > at > > > mx.managers::LayoutManager/validateDisplayList()[E:\dev\3.0.x\frameworks\projects\framework\src\mx\managers\LayoutManager.as:602] > > at > > > mx.managers::LayoutManager/doPhasedInstantiation()[E:\dev\3.0.x\frameworks\projects\framework\src\mx\managers\LayoutManager.as:657] > > at Function/http://adobe.com/AS3/2006/builtin::apply() > > at > > > mx.core::UIComponent/callLaterDispatcher2()[E:\dev\3.0.x\frameworks\projects\framework\src\mx\core\UIComponent.as:8460] > > at > > > mx.core::UIComponent/callLaterDispatcher()[E:\dev\3.0.x\frameworks\projects\framework\src\mx\core\UIComponent.as:8403] > > > > Bom, sei que o email ficou um pouco longo, mas agradeceria se alguém > tivesse > > alguma sugestão. > > > > Att, > > > > Fredy Gadotti. > > > --~--~---------~--~----~------------~-------~--~----~ 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 -~----------~----~----~----~------~----~------~--~---
