【发布时间】:2010-05-13 07:41:35
【问题描述】:
我的 flex 应用程序中有各种 mxml 组件,它们都需要显示基于相同数据的统计信息。我该怎么做呢?我是否需要一些像 cairngrom 或 puremvc 这样的 mvc 框架,或者没有它们我可以做到吗? 有什么设计理念吗?
【问题讨论】:
标签: apache-flex model-view-controller
我的 flex 应用程序中有各种 mxml 组件,它们都需要显示基于相同数据的统计信息。我该怎么做呢?我是否需要一些像 cairngrom 或 puremvc 这样的 mvc 框架,或者没有它们我可以做到吗? 有什么设计理念吗?
【问题讨论】:
标签: apache-flex model-view-controller
Tour de Flex 现在有一个关于框架的部分,指出了现有的各种选项。另请查看我在Flex Best Practices 上制作的视频。并在Architectural Patterns 上查看 Flex Screencast 的第一步。
【讨论】:
您不需要任何框架。你知道数据绑定吗?
http://www.flexafterdark.com/docs/Flex-Binding
通过这种方式,您可以将数据设置为许多组件的数据提供者。例如,要在 dataGrid 中显示您在 mxml 中设置的数据,它是属性
dataProvider="{yourDataArrayCollectionIdentifier}"
在你的 arrayCollection 声明中你需要设置元标记 [Bindable]
[Bindable] var yourDataArrayCollectionIdentifier : ArrayCollection;
还有其他数据类型可以用作数据提供者,最常见的只是 arrayCollection
【讨论】:
有几种方法可以解决这个问题。出于封装目的,您应该将共享数据隔离到一个单独的类中;可能是一个值对象,尽管它不是必须的。
然后在此类类型的每个 MXML 组件中创建一个公共变量属性。创建每个 mxml 组件的实例时,传入数据类的“全局”实例。
您不需要使用 MVC 框架,但 Cairngorm 模型定位器也可用于解决此问题。模型定位器是一个单例。您将数据存储在单例实例中;然后每个 MXML 组件将引用数据的单例。但是,像这样创建外部依赖项会破坏封装。我更喜欢非应用程序特定组件的参数传递路径。
【讨论】:
package
{
public class ApplicationViewModel
{
[Bindable] public var message:String = "";
}
}
您现在可以在创建该实例的 MXML 中使用此消息。
单例类用于您想要保存所有状态的一些信息的不同场景。一个更好的例子是 Chess Board,你的棋盘是 Singleton 类,它的状态永远不会改变,因为你必须跟踪所有在棋盘上移动的硬币及其位置。
您将在要显示数据的视图中注入此消息变量。
【讨论】: