Flex - comunicação entre dois componentes num ViewStack [RESOLVIDO]

Olás

Tenho um ViewStack e carrego um componente cada NavigatorContent.

Há um componente de listar cliente (aparece primeiro) e outro de inserir cliente.

Preciso que a lista do primeiro componente seja atualizada assim que eu inserir um cliente (quando por ex, eu inserir e voltar pra outra view pra ver a lista, constar o cliente lá).

Já tentei apontar direto da segunda view para o datagrid da primeira (forma não recomendada) e também despachar evento de cliente inserido pra pegar na view da lista mas não funcionou, parece que ele perde a referência dos objetos entre as views.

Alguém tem alguma sugestão?
Obrigado!

criar um metodo que atualiza a viewstack,
quando inserir os dados.
ou caso vc esteja usando remote object
no result vc faz o refresh

não sei se entendi bem sua duvida…

mas pelo que entendi
essa é uma sugestão.

O problema é que não consigo acessar o objeto de outra view pra isso ou, quando despacho um evento de uma view, a outra não consegue pegar também (acho que as views perdem suas instâncias quando mudamos de uma pra outra).

Uma forma que encontrei pra meu problema foi recarregar o DataGrid da primeira view no evento “show” do NavigatorContent, mas não consegui fazer a comunicação dos componentes entre as views.

Valeu!

Usa o container das duas views como um Mediator. :smiley:

O container dos componentes é o ViewStack.
Imagino que esteja falando de tentar algo como “views.cpBuscaCliente.dataGridCliente…” (de acordo com o cod abaixo) , mas o flex não cria árvore de objetos, os IDs (objetos) são acessados diretos, mas mesmo assim, tentando acessar direto o “cpBuscaCliente” no componente de inserir cliente não deu certo, ele não reconhece o obj/componente de busca.

Obrigado!

		
		<mx:ViewStack id="views" width="100%" height="100%">
			
			<s:NavigatorContent id="vsBuscar" label="Buscar" show="buscarCliente.init()"   >	
					<cp:BuscarCliente 	id="cpBuscarCliente"  	/>		
			</s:NavigatorContent>
			
			<s:NavigatorContent id="vsInserir" label="Inserir" >	
				<cp:InserirCliente id="cpInserirCliente"  />		
			</s:NavigatorContent>
			
		
		</mx:ViewStack>
		
		

Nao nao oque voce esta tentando fazer é tight coupling um componente dependente do outro. Mudou um id, fo**u a aplicacao.
Digo para disparar um custom event de um stack para ser capturado no container e o container executar a operacao no outro ou transferir informacoes para o outro stack.
Se nao entendeu, me adiciona no skype e eu te explico melhor. skype:fa.batista

Pela hora complicou usar skype, mas tentei algo bem básico pra ver se a aplicação pega um custom event (bem simples), por enquanto não rolou mas ainda não vi onde errei.

1 - coloquei o listener onde ficam os componentes

[code]<fx:Script>
<![CDATA[

		import mx.controls.Alert;
		
		private function init():void{
			addEventListener("ClienteInserido",handleClienteInserido);
		}
		
		private function handleClienteInserido(e:Event):void{
			Alert.show("pegou ClienteInserido");
		}
		
	]]&gt;
&lt;/fx:Script&gt;

<mx:ViewStack id=“views” width=“100%” height=“100%”>

&lt;s:NavigatorContent id="vsBuscar" label="Buscar"  &gt;    
        &lt;cp:BuscarCliente    id="cpBuscarCliente"    /&gt;         
&lt;/s:NavigatorContent&gt;  
  
&lt;s:NavigatorContent id="vsInserir" label="Inserir" &gt;    
    &lt;cp:InserirCliente id="cpInserirCliente"  /&gt;        
&lt;/s:NavigatorContent&gt;  

</mx:ViewStack>

[/code]

2 - no componente de inserir cliente o disparo o evento no método que trata o sucesso de cadastro

Qq coisa nos falamos amanhã, mas acho que estou quente segundo sua idéia.
Valeu!

Isso ae. Essa é a idéia do Design Pattern Mediator.

Legal! Para funcionar só faltou adicionar o parâmetro “true” para despachar o evento como bubble (achei que era default o bubble)

Brigadão pela força :smiley:
abs

nesse caso é necessario bubble? acredito que não pois o evento vem do root da aplicacao até o parent, ja tentou fazer sem o bubble?

Sim, era como estava antes e, sem o bubble, não tava rolando.
Mas isso deve ser pq estou usando um módulo. Carrego na aplicação principal um módulo de cliente que por sua vez carrega os componentes (um de busca/edição/exclusão e outro de inserção).
abs

Entendi.