Похоже, что состояния в вашем приложении не связаны с состояниями в ваших компонентах.Простое присвоение им одного и того же имени никак не связывает их.В любом случае, если вы просто пытаетесь скрыть / переключить компоненты в своем основном Приложении, вам действительно нужны там только состояния.
Один из вариантов - просто получить доступ к свойству currentState
приложения непосредственно из компонентов.:
<s:Button id="btn1" label="Button1" click="FlexGlobals.topLevelApplication.currentState = 'State2'"/>
Это работает, но это не рекомендуется, поскольку оно сильно связывает компонент с родительским приложением, и в большом проекте это приведет к путанице, если вам придется проводить рефакторинг (или работать с другими людьми).
Другой вариант - заставить каждый компонент отправлять событие, чтобы сообщить родителю, что оно должно измениться:
<fx:Metadata>
[Event(name="changeParentState", type="flash.events.Event")]
</fx:Metadata>
<s:Button id="btn1" label="Button1" click="dispatchEvent(new Event('changeParentState'));"/>
Затем родитель решит, в какое состояние он должен переключиться:
<local:Test1 includeIn="State1" changeParentState="currentState='State2'" />
<local:Test2 includeIn="State2" changeParentState="currentState='State1'" />
Этот способ более общий и просто лучше ООП.Однако, если вы хотите, чтобы ваши компоненты могли запускать больше, чем просто одно состояние, вам, возможно, придется сделать что-то более сложное.Это должно дать вам представление о том, куда идти, по крайней мере.