Pessoal,
Situação:
Estou desenvolvendo um projeto, cuja tela principal deverá conter um
ModuleLoader que carregará vários módulos ao longo da existência da
aplicação, existindo a possibilidade de um módulo ser recarregado
também várias vezes, caso o usuário queira, por exemplo, entrar no
módulo de fornecedores, sair, ir para o módulo de clientes, sair e
voltar para o módulo de fornecedores.
Problema:
Os módulos funcionam perfeitamente na primeira vez em que são
carregados, porém, na segunda vez que são carregados, alguns
componentes, como o DataGrid, por exemplo, ao disparar o evento
ListEvent, não passam a linha atual para a propriedade
itemRenderer.data do evento. Já coloquei e tirei o SDK da RSL, já
troquei a versão do SDK, troquei o ModuleLoader da tela principal por
um ViewStack, mas nada de funcionar corretamente. Atualmente estou
utilizando o SDK 3.4 (merged into code). Abaixo um trecho do meu
componente NavigationContext, que dentre outras coisas, gerencia o
carregamento dos módulos:
[code]
package br.com.hordi.rechapps.view.utils{
import br.com.hordi.rechapps.view.forms.LoadingProgressForm;
import mx.core.Application;
import mx.events.ModuleEvent;
import mx.modules.ModuleLoader;
import mx.resources.ResourceManager;
import flash.events.EventDispatcher;
[Resource("exceptions")]
public class NavigationContext extends EventDispatcher{
private static var instance:NavigationContext;
[Bindable] private var moduleLoader:ModuleLoader;
[Bindable] private var loadingProgressForm:LoadingProgressForm;
public function NavigationContext( enforcer:SingletonEnforcer ){
if( !enforcer ){
throw new
Error( ResourceManager.getInstance().getString( "exceptions",
"SingletonInstanceException" ) );
} else {
loadingProgressForm =
LoadingProgressForm.getInstance();
}
}
public static function getInstance():NavigationContext{
if( instance == null ){
instance = new NavigationContext( new
SingletonEnforcer() );
}
return instance;
}
public function browse( url:String ):void{
moduleLoader = new ModuleLoader();
moduleLoader.addEventListener(ModuleEvent.READY,
function(event:ModuleEvent):void{
loadingProgressForm.hide();
for( var idx:Number = 0; idx <
Application.application.modulesContainer.getChildren().length; idx++ )
{
var unusedModule:ModuleLoader =
Application.application.modulesContainer.getChildAt( idx ) as
ModuleLoader;
Application.application.modulesContainer.removeChild( unusedModule );
unusedModule.unloadModule();
}
Application.application.modulesContainer.addChild( moduleLoader );
Application.application.modulesContainer.selectedIndex =
(Application.application.modulesContainer.getChildren().length-1);
});
moduleLoader.addEventListener(ModuleEvent.PROGRESS,
function(event:ModuleEvent):void{
loadingProgressForm.setProgress(
Math.ceil((event.bytesLoaded /
event.bytesTotal)*100), 100 );
loadingProgressForm.label = "Carregando módulo
- " +
Math.ceil((event.bytesLoaded / event.bytesTotal)*100) + "%";
loadingProgressForm.title = "Carregando...";
});
moduleLoader.loadModule( url );
loadingProgressForm.show();
}
}
}
class SingletonEnforcer{}
[/code]
OBS: Deixei os listeners do moduleLoader inline mesmo, porque ainda
estou tentando outras soluções para o problema.
Se alguém puder ajudar, agradeço bastante!
Um abraço!
Diego Hordi
--
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