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

Responder a