You are viewing a plain text version of this content. The canonical link for it is here.
Posted to users@royale.apache.org by "romanisitua@yahoo.com" <ro...@yahoo.com> on 2021/08/04 19:54:48 UTC

Access current State from other files?

Hi Everyone,
I have created a simple application with two views one for a login form and the other is main view that shows the application. To make the code readable I decided to put the view definition in separate files and call them from the Responsive View. I have defined the states of the app accordingly.
Main.mxml
<?xml version="1.0" encoding="utf-8"?><j:ApplicationResponsiveView xmlns:fx="http://ns.adobe.com/mxml/2009"    xmlns:j="library://ns.apache.org/royale/jewel"    xmlns:js="library://ns.apache.org/royale/basic"    xmlns:html="library://ns.apache.org/royale/html"     xmlns:mx="library://ns.apache.org/royale/mx"       xmlns:view="*" initComplete="initCompleteHandler(event)">
 <fx:Script>      <![CDATA[            
              private function initCompleteHandler(event:Event):void          {             trace("Main ResponsiveView is ready !!! ");
             trace(" set initial current state to log in ..");
                      currentState = 'login';       
           trace("  currentState: " + currentState);
        }
       ]]>     </fx:Script>          


 <j:states>              <js:State name="login" />                      <js:State name="loggedIn" />               </j:states>
        <j:beads>                <js:SimpleStatesImpl/>        </j:beads>
            <view:LogIn includeIn="login">                       </view:LogIn>
   
    <j:ApplicationMainContent id="mainContent" hasTopAppBar="true" hasFooterBar="true" selectedContent="content" includeIn="loggedIn">               <j:SectionContent id="sc" name="content">                             <view:Content>                            </view:Content>                  </j:SectionContent>    </j:ApplicationMainContent>
</j:ApplicationResponsiveView>


The log in view is defined as follows
?xml version="1.0" encoding="utf-8"?><j:Card xmlns:fx="http://ns.adobe.com/mxml/2009"         xmlns:j="library://ns.apache.org/royale/jewel"          xmlns:js="library://ns.apache.org/royale/basic"          xmlns:html="library://ns.apache.org/royale/html"           id="loginForm" x="60", y="60" height="50%">                <html:H1 text="Royale login"/>                <j:TextInput id="username" text="someuser"/>                <j:TextInput id="password" text="somepass">                    <j:beads>                        <j:PasswordInput/>                    </j:beads>                </j:TextInput>                <j:Button text="Login" emphasis="primary" click="currentState = 'loggedIn'" /></j:Card>

Everything compiles fine. When I run the application and click log in button the view does not change to the Content view. In other words the button does not work.
However, If I embed the logIn.mxml inside the Main.mxml it works fine.

How can I access the Main.mxml current state from another file ?

Regards,

RE: Access current State from other files?

Posted by Maria Jose Esteve <mj...@iest.com>.
Hello,
I would do it with the binding:
- Add to the two views the beads <js:SimpleStatesImpl/>.
- Add the states also to the two views (I'm not sure if this is mandatory... I have them in all the files).
- To activate the binding you must add the corresponding bead: <js:ViewDataBinding/>, in case of views, <js:ContainerDataBinding/> in case of containers.
- Pass the currentState variable from the ApplicationResponsiveView to the Card, something like this:

<view:Content currentState="{currentState}">
</view:Content>

I hope this helps.
See you tomorrow.

Hiedra.

De: romanisitua@yahoo.com <ro...@yahoo.com>
Enviado el: miércoles, 4 de agosto de 2021 21:55
Para: users@royale.apache.org
Asunto: Access current State from other files?

Hi Everyone,

I have created a simple application with two views one for a login form and the other is main view that shows the application. To make the code readable I decided to put the view definition in separate files and call them from the Responsive View. I have defined the states of the app accordingly.

Main.mxml

<?xml version="1.0" encoding="utf-8"?>
<j:ApplicationResponsiveView xmlns:fx="http://ns.adobe.com/mxml/2009"
    xmlns:j="library://ns.apache.org/royale/jewel"
    xmlns:js="library://ns.apache.org/royale/basic"
    xmlns:html="library://ns.apache.org/royale/html"
     xmlns:mx="library://ns.apache.org/royale/mx"
     xmlns:view="*" initComplete="initCompleteHandler(event)">

 <fx:Script>
      <![CDATA[



         private function initCompleteHandler(event:Event):void
          {
             trace("Main ResponsiveView is ready !!! ");

             trace(" set initial current state to log in ..");


             currentState = 'login';


           trace("  currentState: " + currentState);

        }

       ]]>
     </fx:Script>



<j:states>
              <js:State name="login" />
              <js:State name="loggedIn" />
       </j:states>

        <j:beads>
                <js:SimpleStatesImpl/>
        </j:beads>

            <view:LogIn includeIn="login">
            </view:LogIn>



    <j:ApplicationMainContent id="mainContent" hasTopAppBar="true" hasFooterBar="true" selectedContent="content" includeIn="loggedIn">
       <j:SectionContent id="sc" name="content">
                <view:Content>
                 </view:Content>
       </j:SectionContent>
    </j:ApplicationMainContent>

</j:ApplicationResponsiveView>



The log in view is defined as follows

?xml version="1.0" encoding="utf-8"?>
<j:Card xmlns:fx="http://ns.adobe.com/mxml/2009"
         xmlns:j="library://ns.apache.org/royale/jewel"
          xmlns:js="library://ns.apache.org/royale/basic"
          xmlns:html="library://ns.apache.org/royale/html"
           id="loginForm" x="60", y="60" height="50%">
                <html:H1 text="Royale login"/>
                <j:TextInput id="username" text="someuser"/>
                <j:TextInput id="password" text="somepass">
                    <j:beads>
                        <j:PasswordInput/>
                    </j:beads>
                </j:TextInput>
                <j:Button text="Login" emphasis="primary" click="currentState = 'loggedIn'" />
</j:Card>


Everything compiles fine. When I run the application and click log in button the view does not change to the Content view. In other words the button does not work.

However, If I embed the logIn.mxml inside the Main.mxml it works fine.


How can I access the Main.mxml current state from another file ?


Regards,