Acessar currentState de outro arquivo

2 views
Skip to first unread message

Ataides Gomes

unread,
Oct 20, 2010, 8:17:14 AM10/20/10
to fle...@googlegroups.com
Olá a todos,

  Estou com uma pequena dúvida, como faço para mudar o currentState de outro arquivo, tenho um arquivo com o Form de login que é um TitleWindow, e quando acessar quero mudar o State de outro arquivo que seria do meu Header, a idéia seria colocar o nome do usuário neste Header e também atualizar o Stat que é outro .mxml.

   Alguém poderia ajudar ?
 

Erko Bridee de Almeida Cabrera

unread,
Oct 20, 2010, 12:40:35 PM10/20/10
to fle...@googlegroups.com
Cara depende de como você organizou seus componentes...

caso 1:

digamos que no componte pai você tem e gerencia sua tela e o titleWindow, então vc precisará de uma função publica para alterar o currentState do componente visual onde vc quer alterar

caso 2:

do componente de layout que vc quer mudar o currentState que vc chama o titleWindow, então nesse caso pode-se criar um evento que será tratado no onde vc chama o titleWindow, e ali vc muda o currentState do seu layout





 

--
Você recebeu esta mensagem porque está inscrito na lista "flexdev"
Para enviar uma mensagem, envie um e-mail para fle...@googlegroups.com
Para sair da lista, envie um email em branco para flexdev-u...@googlegroups.com
Mais opções estão disponíveis em http://groups.google.com/group/flexdev



--
Att,
Erko Bridee de Almeida Cabrera
TechDev   : http://blog.erkobridee.com/
Gospel    : http://gospel.erkobridee.com/
Twitter   : http://twitter.com/ErkoBridee
Currículo : http://netcarreiras.com/prof.html?uid=11410

Atgomes

unread,
Oct 20, 2010, 3:00:17 PM10/20/10
to flexdev
Erko obrigado pela resposta, mas ainda ficou um pouco confuso pra mim.
Assim eu tenho um .mxml Principal, dele eu crio um TitleWindow, que
seria a tela de Login.
Deste principal também chamo o Header.mxml, mas chamo como view,
<view:Header...

De dentro do TitleWindow de Login, tento executar Header.currentState
= LOGGEDIN_STATE;
E tenho o erro "Acesso de propriedade possivelmente indefinida
currentState por meio de uma referência com tipo estático"

On 20 out, 13:40, Erko Bridee de Almeida Cabrera
<erko.bri...@gmail.com> wrote:
> Cara depende de como você organizou seus componentes...
>
> caso 1:
>
> digamos que no componte pai você tem e gerencia sua tela e o titleWindow,
> então vc precisará de uma função publica para alterar o currentState do
> componente visual onde vc quer alterar
>
> caso 2:
>
> do componente de layout que vc quer mudar o currentState que vc chama o
> titleWindow, então nesse caso pode-se criar um evento que será tratado no
> onde vc chama o titleWindow, e ali vc muda o currentState do seu layout
>
> Em 20 de outubro de 2010 10:17, Ataides Gomes <atgo...@gmail.com> escreveu:
>
>
>
> > Olá a todos,
>
> >   Estou com uma pequena dúvida, como faço para mudar o currentState de
> > outro arquivo, tenho um arquivo com o Form de login que é um TitleWindow, e
> > quando acessar quero mudar o State de outro arquivo que seria do meu Header,
> > a idéia seria colocar o nome do usuário neste Header e também atualizar o
> > Stat que é outro .mxml.
>
> >    Alguém poderia ajudar ?
>
> > --
> > Você recebeu esta mensagem porque está inscrito na lista "flexdev"
> > Para enviar uma mensagem, envie um e-mail para fle...@googlegroups.com
> > Para sair da lista, envie um email em branco para
> > flexdev-u...@googlegroups.com
> > Mais opções estão disponíveis emhttp://groups.google.com/group/flexdev
>
> --
> Att,
> Erko Bridee de Almeida Cabrera
> *TechDev   : *http://blog.erkobridee.com/
> *Gospel    : *http://gospel.erkobridee.com/
> *Twitter   : *http://twitter.com/ErkoBridee
> *Currículo : *http://netcarreiras.com/prof.html?uid=11410

João Paulo Sabino de Moraes

unread,
Oct 20, 2010, 3:30:24 PM10/20/10
to fle...@googlegroups.com
kra uma maneira bem simples de vc resolver isso eh usando variaveis Bindable...

la no Head tu faz uma parada assim:

<Head currentState = {viewModel.app_state} 
......
</Head>

//classe singleton
public class ViewModel {
   
  [Bindable]
    public var appState:String = "initState";

   getInstance() : ViewModel{} 
   .......
}

a instancia viewModel é um Singleton ... daí vc pode mudar a variável app_state do singleton viewModel de qualquer lugar do projeto
e o estado do Head vai mudar.



Atgomes

unread,
Oct 20, 2010, 4:36:05 PM10/20/10
to flexdev
Muito obrigado João, vou fazer os testes.

On 20 out, 16:30, João Paulo Sabino de Moraes <jona...@gmail.com>
wrote:

Patrick Facchin

unread,
Oct 20, 2010, 9:42:18 PM10/20/10
to fle...@googlegroups.com
Ataides deu certo?

Atgomes

unread,
Oct 21, 2010, 4:04:06 PM10/21/10
to flexdev
Fala Patrik beleza,

Infelizmente não consegui colocar em prática o que disse o nosso
amigo João, andei dando uma lida no diz o material sobre singleton e
me pareceu ser algo diferente do que preciso fazer, mas mesmo assim
tentei executar não funcionou e ficaram dúvidas, por exemplo onde
criar a classe ViewModel, como chamar, a idéia não ficou muito clara.

Se tiver alguma outra idéia, na lista o pessoal falou sobre Events,
então agora estou lendo isso, mas o fato é ainda não solucionei a
questão.
Bem está muito claro que estou iniciando no Flex, talvez isso seja
bem simples para alguém que já conheça.

On 20 out, 22:42, Patrick Facchin <patrick.facc...@gmail.com> wrote:
> Ataides deu certo?
>

João Paulo Sabino de Moraes

unread,
Oct 21, 2010, 4:18:06 PM10/21/10
to fle...@googlegroups.com
Naun sabia que vc era iniciante....

Mas tem uma coisa q independe de linguagem.....
A classe ViewModel pode estar em qualquer parte do projeto, vai depender da maneira como vc organizar....
Escolhi esse nome por se aproximar mais de um Model da view já que guardo seu estado atual....
Usei como um singleton porque posso acessar sua referencia facilmente de qualquer parte do projeto
e a variavel é Bindable porque quando ela for atualizada automaicamente todas os componentes que referenciam ela 
seram atualizados de acordo com o novo valor

Nesse exemplo aih eu tenho uma classe singleton AppStates q específica os estados da aplicação....

package com.project.business.singleton
{
public class AppStates
{
private static var _instance:AppStates;
public static const INICIO_STATE:String = "inicio_page";
public static const FOTOS_STATE:String = "fotos_page";
public static const VIDEOS_STATE:String = "videos_page";
public static const AMIGOS_STATE:String = "amigos_page";
public static const NOTICIA_STATE:String = "noticia_page";
public static const BIO_STATE:String = "bio_page";
public static const MEMORIA_STATE:String = "memoria_page";
public static const START_STATE:String = INICIO_STATE; 
[Bindable]
public var appState:String = "";
public function AppStates()
{
}
public static function instance():AppStates {
if (_instance == null) {
_instance = new AppStates();
}
return _instance;
}

}
}



Em uma classe da View eu acesso a referencia Bindable appStates da seguinte maneira:

<mx:VBox  creationComplete="initPreLoader();telaAmigosPm.getOwnerData()" backgroundColor="#ffffff" currentState="{AppStates.instance().appState}"  xmlns:mx="http://www.adobe.com/2006/mxml"
width="832" height="1116" verticalGap="0" xmlns:ns1="com.commentlab.views.*" horizontalAlign="center" >
<mx:states>
<mx:State    name="inicio_page">
<mx:SetProperty target="{iniBtn}" name="enabled" value="false"/>
<mx:AddChild relativeTo="{vbox1}" position="lastChild">
<ns1:TelaInicio id="telaInicio">
</ns1:TelaInicio>
</mx:AddChild>
</mx:State>
<mx:State name="amigos_page">
<mx:SetProperty target="{iniBtn}" name="enabled" value="true"/>
<mx:SetProperty target="{amBtn}" name="enabled" value="false"/>
<mx:AddChild relativeTo="{vbox1}" position="lastChild">
<ns1:TelaAmigos id="telaAmigos">
</ns1:TelaAmigos>
</mx:AddChild>
<mx:SetStyle target="{vbox1}" name="horizontalAlign" value="center"/>
</mx:State>
<mx:State name="videos_page">
<mx:SetProperty target="{videosBtn}" name="enabled" value="false"/>
<mx:AddChild relativeTo="{vbox1}" position="lastChild">
<ns1:TelaVideos id="telaVideos">
</ns1:TelaVideos>
</mx:AddChild>
</mx:State>
<mx:State name="fotos_page">
<mx:SetProperty target="{iniBtn}" name="enabled" value="true"/>
<mx:SetProperty target="{fotosBtn}" name="enabled" value="false"/>
<mx:AddChild relativeTo="{vbox1}" position="lastChild">
<ns1:TelaFotos id="telaFotos" height="524">
</ns1:TelaFotos>
</mx:AddChild>
</mx:State>
<mx:State name="noticia_page">
<mx:SetProperty target="{button1}" name="enabled" value="false"/>
<mx:SetProperty target="{button1}" name="buttonMode" value="true"/>
<mx:AddChild relativeTo="{vbox1}" position="lastChild">
<ns1:TelaNoticia id="telaNoticia" height="834">
</ns1:TelaNoticia>
</mx:AddChild>
</mx:State>
<mx:State name="memoria_page">
<mx:SetProperty target="{memBtn}" name="enabled" value="false"/>
<mx:SetProperty target="{memBtn}" name="buttonMode" value="true"/>
<mx:AddChild relativeTo="{vbox1}" position="lastChild">
<ns1:TelaMemoria id="telaMemoria">
</ns1:TelaMemoria>
</mx:AddChild>
</mx:State>
<mx:State name="bio_page">
<mx:SetProperty target="{bioBtn}" name="enabled" value="false"/>
<mx:SetProperty target="{bioBtn}" name="buttonMode" value="true"/>
<mx:AddChild relativeTo="{vbox1}" position="lastChild">
<ns1:TelaBiografia id="telaBio">
</ns1:TelaBiografia>
</mx:AddChild>
</mx:State>
</mx:states>

Dessa forma em qualquer parte do projeto que eu atualizar o valor de appState tipo:

AppStates.instance().appState = AppStates.INICIO_STATE;

a view lá em cima que acessa  a variável appState no currentState vai mudar seu estado..... 

ou seja , pra mudar o estado da tua tela basta uma atribuição.


João Paulo Sabino de Moraes

unread,
Oct 21, 2010, 4:23:24 PM10/21/10
to fle...@googlegroups.com
mals ae pelos erros de português , é a pressa =P

Atgomes

unread,
Oct 21, 2010, 6:10:41 PM10/21/10
to flexdev
Grande João Paulo, acho que mais importante que resolver a questão é
APRENDER, e agora com esta sua explicação detalhada ficou muito claro,
tenho certeza que o tópico será útil para outros que tenham o mesmo
problema como foi para mim.

Valeu mesmo e uma hora eu chego lá, no início é sempre assim...aquele
abraço.

On 21 out, 18:23, João Paulo Sabino de Moraes <jona...@gmail.com>
wrote:

Patrick Facchin

unread,
Oct 21, 2010, 7:27:43 PM10/21/10
to fle...@googlegroups.com
véio eu faço um lance bem suce para fazer os modulos se conversarem dai vc pode usar essa mesma ideia para acessar o viewState do outros modulo, o lance é referenciar o pai no filho para acessar o viewState do pai se for inverso o viewState estiver no filho vc usa o child, essa ideia eu apliquei com modulos!

no modulo filho eu crio um variavel _parent:Object
e no modulo pai na hora que vou carregar o filho eu referencio o pai na variavel _parent dentro do filho

veja o exemplo:

private function onReadySeguranca(event:
ModuleEvent):void{
                obj                        = event.target as ModuleLoader;
                obj.child._parent         = this;
                container.addChild(event.target as ModuleLoader);
}

dai dentro do filho eu consigo acessar o metodos dentro do pai pelo _parent

exemplo:

_parent.metodoDentroDoPai();

se quizer fazer ao contrario tipo acessar o metodo dentro do filho é só usar o child denovo

obj.child.metodoDoFilho();

bem baba

ve se da certo ai!
;)


Atgomes

unread,
Oct 21, 2010, 9:02:48 PM10/21/10
to flexdev
Amigo Patrick, também funcionou perfeitamente assim como a dica do
nosso outro amigo João Paulo, as duas funcionam perfeitamente,
maravilha grato pela força.

On 21 out, 21:27, Patrick Facchin <patrick.facc...@gmail.com> wrote:
> véio eu faço um lance bem suce para fazer os modulos se conversarem dai vc
> pode usar essa mesma ideia para acessar o viewState do outros modulo, o
> lance é referenciar o pai no filho para acessar o viewState do pai se for
> inverso o viewState estiver no filho vc usa o child, essa ideia eu apliquei
> com modulos!
>
> no modulo filho eu crio um variavel _parent:Object
> e no modulo pai na hora que vou carregar o filho eu referencio o pai na
> variavel _parent dentro do filho
>
> veja o exemplo:
>
> private function onReadySeguranca(event:
> ModuleEvent):void{
>                 obj                        = event.target as ModuleLoader;
>                 obj.child._parent         = this;
>                 container.addChild(event.target as ModuleLoader);
>
> }
>
> dai dentro do filho eu consigo acessar o metodos dentro do pai pelo _parent
>
> exemplo:
>
> _parent.metodoDentroDoPai();
>
> se quizer fazer ao contrario tipo acessar o metodo dentro do filho é só usar
> o child denovo
>
> obj.child.metodoDoFilho();
>
> bem baba
>
> ve se da certo ai!
> ;)
>

Patrick Facchin

unread,
Oct 22, 2010, 12:10:02 AM10/22/10
to fle...@googlegroups.com
showw
Reply all
Reply to author
Forward
0 new messages