Modularizar uma aplicação pode se tornar algo quase obrigatório depois que uma determinada aplicação ultrapassa um certo tamanho. Afinal, não queremos que nossos clientes fiquem horas e horas na frente da tela, esperando o sistema carregar uma infinidade de recursos que ele sequer utilizará para aquela tarefa.
Comecei a modularizar uma aplicação, e a uma certa altura dos testes, eis que me deparo com o seguinte erro:
TypeError: Error #1034: Falha de coerção de tipo: não é possível converter
mx.managers::DragManagerImpl@1444b809 em mx.managers.IDragManager.at
mx.managers::DragManager$
O erro ocorria sempre que eu carregava o módulo 1, descarregava-o, e então carregava o módulo 2. Sempre que eu clicava em uma DataGrid deste segundo módulo, o famigerado erro era disparado.
Pelo que pude observar depois de muita pesquisa e uns dias quebrando a cabeça, existe uma falha por parte do Flex quando trabalhamos com modularização. Se você faz referencia uma classe dentro de um módulo, por vezes, o Flex “se esquece” de linká-la na tua Main App. Ou seja, quando o módulo da sua aplicação tenta utilizá-lo, ele simplesmente não existirá.
A carta na manga!
Para solucionar este problema, vamos contar com uma característica do Flash Player: Por padrão, as definições de todas as classes que serão utilizadas pelo sistema podem estar presentes na aplicação principal. Ou seja, para evitar a falha, vamos forçar a referencia aos managers que estão gerando o erro.
Vi casos de pessoas que obtem um erro semelhante no uso de PopUpManagers. Para que isso não aconteça mais, escreva o seguinte código na sua aplicação principal:
import mx.managers.PopUpManager; import mx.managers.DragManager; private var popupMan:PopUpManager; private var dragMan:DragManager;
Vc pode alterar o nome das variáveis popupMan e dragMan ao seu gosto. O importante é que elas sejam instanciadas com seus respectivos tipos. Isso deverá resolver seu problema.















