什么是Flex良好实践来改变另一个组件的状态?

时间:2010-10-02 20:43:26

标签: flex

我目前使用:Flexglobals.toplevelapplication.component1.compnent2.currentState ='something';

还有更好的办法吗?我可以将组件的状态绑定到模型中的变量吗?

2 个答案:

答案 0 :(得分:3)

理想情况下,组件应该是自包含的应用程序的一小部分。一个组件不应该对任何组件产生任何影响(包括改变状态),除了可能是它的子组件。

用于更改不相关组件状态的“封装正确”方法是从组件调度事件。组件的父级(或层次结构链中较高的某个组件)将通过调用需要状态更改的组件上的方法或更改组件上的属性来执行事件侦听器并更改相应组件的状态。这需要改变状态。

如果你有一个复杂的层次结构,这种方法可能导致大量繁琐,在链中创建事件,并在链中创建属性/方法以保持封装。一些框架,如Cairngorm引入了一个全局单例来避免这种单调乏味。在Cairngorm中,singleton是ModelLocator。

ModeLlocator基本上是应用程序中的全局依赖项。您可以为任何组件提供访问权限,如果在一个位置更改属性,则通过使用绑定,可以在其他位置自动更新。要使用绑定更改状态,请使用以下方法:

在ModelLocator中,创建一个变量来保存相关视图的状态:

[Bindable]
public var comp1State : String = 'defaultState';

在comp1中执行以下操作:

<mx:Container currentState="{model.comp1State}" otherComponentProperties>
 <!-- other component code including defining the states -->
</mx:Container>

然后在要更改状态的组件中,执行以下操作:

model.comp1State = 'nextState'

绑定将从这里开始。我不会轻易使用他的方法。这取决于您尝试创建的组件以及您重复使用的内容。我见过的最常见的方法不是使用状态,而是使用ViewStack中的selectedIndex。但是,方法是一样的。

答案 1 :(得分:0)

是。我通常将组件的状态绑定到模型中的属性。

只要您使模型上的属性可绑定,您就应该能够绑定 直接在你的视图中建模。你必须在你的模型中设置状态。我希望使用像[swiz] [http://swizframework.org/]或或mate这样的框架。