В идеале компоненты должны быть небольшими частями вашего приложения.Один компонент не должен оказывать никакого влияния (включая изменение состояния) на любой компонент, кроме, возможно, его дочерних элементов.
Подход "Инкапсуляция собственно" для изменения состояния несвязанного компонента заключается в отправке события изсоставная часть.Родитель компонента (или некоторый компонент выше в цепочке иерархии) будет выполнять прослушиватель событий и изменять это состояние соответствующего компонента, либо вызывая метод в компоненте, который требует изменения состояния, либо изменяя свойство компонента.это требует изменения состояния.
Если у вас сложная иерархия, этот подход может привести к большому утомлению, созданию событий вверх по цепочке и созданию свойств / методов вниз по цепочке, чтобы сохранить инкапсуляцию.Некоторые фреймворки, такие как Cairngorm, вводят глобальный синглтон, чтобы избежать этой скуки.В Cairngorm этот синглтон является ModelLocator.
ModeLlocator, по сути, является глобальной зависимостью в вашем приложении.Вы можете предоставить любому компоненту доступ к нему, и с помощью привязки, если свойство изменяется в одном месте, оно автоматически обновляется в другом месте.Чтобы изменить состояние с помощью привязки, используйте такой подход:
В ModelLocator создайте переменную для хранения состояния для рассматриваемого представления:
[Bindable]
public var comp1State : String = 'defaultState';
В comp1 выполните что-то вродеthis:
<mx:Container currentState="{model.comp1State}" otherComponentProperties>
<!-- other component code including defining the states -->
</mx:Container>
Затем в компоненте, где вы хотите изменить состояние, сделайте что-то вроде этого:
model.comp1State = 'nextState'
Привязка заберет его отсюда.Я бы не использовал его подход слегка, хотя.Это зависит от компонента, который вы пытаетесь создать, и от того, сколько вы собираетесь использовать повторно.Наиболее распространенный способ, которым я видел, это реализовано не с помощью состояний, а с selectedIndex в ViewStack.Но подход был бы таким же.