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
-~----------~----~----~----~------~----~------~--~---