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

Responder a