flex在不同组件之间共享数据

时间:2010-05-13 07:41:35

标签: flex model-view-controller

我在我的flex应用程序中有各种mxml组件,它们都需要根据相同的数据显示统计信息。我该怎么做呢?我需要一些像cairngrom或puremvc这样的mvc框架,还是我可以不用它们? 任何设计理念?

4 个答案:

答案 0 :(得分:0)

您不需要任何框架。你知道数据绑定吗?

http://www.flexafterdark.com/docs/Flex-Binding

这样,您可以将数据设置为许多组件的数据提供者。例如,要在dataGrid中显示您的数据,请在mxml中设置它的属性

dataProvider="{yourDataArrayCollectionIdentifier}"

并在您的arrayCollection声明中,您需要设置metatag [Bindable]

[Bindable] var yourDataArrayCollectionIdentifier : ArrayCollection;

还有其他数据类型可以用作dataprovider,只是arrayCollection是最常见的

答案 1 :(得分:0)

有一些方法可以解决这个问题。出于封装目的,您应该将共享数据隔离到一个单独的类中;可能是一个价值对象,虽然它不一定是。

然后在此类类型的每个MXML组件中创建一个公共变量属性。在创建每个mxml组件的实例时,请传入数据类的“全局”实例。

您不需要使用MVC框架,但Cairngorm模型定位器也可用于解决此问题。模型定位器是单例。您将数据存储在单例实例中;然后每个MXML组件将引用数据的单例。但是,创建这样的外部依赖会破坏封装。我更喜欢非特定应用程序组件的参数传递路径。

答案 2 :(得分:0)

Tour de Flex现在有一个关于框架的部分,指出了那里的各种选项。另请查看我在Flex Best Practices上完成的视频。并查看Architectural Patterns上的Flex Screencast中的第一步。

答案 3 :(得分:0)

package 
{
    public class ApplicationViewModel
    {
        [Bindable] public var message:String = "";  
    }
}

您现在可以在MXML中使用此消息,您可以在其中创建该实例。

单个类用于您想要保存所有状态的一些信息的不同场景。一个更好的例子是国际象棋棋盘,你的棋盘是Singleton级别,它的状态永远不会改变,因为你必须跟踪所有硬币在棋盘上移动及其位置。

您正在要显示数据的视图中注入此消息变量。