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

Responder a