How is that different from the already existing stateGroups<http://help.adobe.com/en_US/flex/using/WS2db454920e96a9e51e63e3d11c0bf63611-7ffa.html>property?
On Sat, Jun 1, 2013 at 12:28 PM, jude <flexcapaci...@gmail.com> wrote: > I've been coming across more and more cases where it would be great to have > support for multidimensional states. What this looks like and how it's used > I'm not sure. Maybe we can discuss ideas. > > Alex wrote on the FlexJS wiki page, > > *States were used often but had a limitation once the set of states you > wanted started having "dimensions". For example, the Flex default button > has an emphasized state, which adds to the selected state to create a lot > of potential skin states. And when we considered having this same button > show a focused state, it got unwieldy so we didn't do it. We never got > around to doing multi-dimensional states, but now it is time to try since > we can break backward compatibility if we have to. *[0] > > I have a couple of suggestions. The first is to create a new State class > that you could add to your declarations and add more states into it. It > would look something like this: > > <Group> > > <!-- default build in states we use now --> > <states> > <State name="page1"/> > <State name="page2"/> > <State name="page3"/> > <State name="settings"/> > </states> > > > <!-- new additional helper state group --> > <declarations> > > <StateGroup id="loginStateGroup"> > <State name="loggedIn"> > <overrides> > <SetProperty target='{button}" property="color" > value="red"/> > <SetProperty target='{this}" property="isAuthenticated" > value="true"/> > </overrides> > </State> > <State name="loggedOut"> > <overrides> > <SetProperty target='{button}" property="color" > value="blue"/> > <SetProperty target='{this}" property="isAuthenticated" > value="false"/> > </overrides> > </State> > <transitions> > <Transitions... /> > </transitions> > </StateGroup> > > </declarations> > > </Group> > > > You would use it like this, loginStateGroup.currentState = "loggedIn". > > I think this would be the easiest way to add more support. It would use the > same syntax we already know. It would also be backwards compatible. The > disadvantages of this would be the lack of support of using states inline. > So the compiler wouldn't recognize things like this, > > <Button color.loggedIn="red" />. > > This second example might be more closely related to the original idea, > > <State name="state1"/> > <State name="state2"/> > <State name="state3"> > <State name="state3_RedState"/> > <State name="state3_BlueState"/> > </State> > > And you would assign it like this, > > currentState = "state3_RedState"; > > or, > > currentState = ["state3", "redState"]; // if renamed to redState > > The nested state would inherit the properties of the parent state. The > thing is there is an inherit property already on the State class. In Flex 3 > we had support for a base state and inheritance. So maybe there's some > support for this already. I'd really like to know what the Flex team was > talking about when they mentioned this. > > Jude > > > > > [0] - > https://cwiki.apache.org/confluence/display/FLEX/Alex%27s+FlexJS+Prototype >