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: [email protected] <[email protected]>
Enviado el: miƩrcoles, 4 de agosto de 2021 21:55
Para: [email protected]
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,