【问题标题】:flex sharing data between different componentsflex 在不同组件之间共享数据
【发布时间】:2010-05-13 07:41:35
【问题描述】:

我的 flex 应用程序中有各种 mxml 组件,它们都需要显示基于相同数据的统计信息。我该怎么做呢?我是否需要一些像 cairngrom 或 puremvc 这样的 mvc 框架,或者没有它们我可以做到吗? 有什么设计理念吗?

【问题讨论】:

    标签: apache-flex model-view-controller


    【解决方案1】:

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

    【讨论】:

      【解决方案2】:

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

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

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

      dataProvider="{yourDataArrayCollectionIdentifier}"
      

      在你的 arrayCollection 声明中你需要设置元标记 [Bindable]

      [Bindable] var yourDataArrayCollectionIdentifier : ArrayCollection;
      

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

      【讨论】:

      • 我知道数据绑定我要问的是如何在不同的 mxml 视图之间共享​​>数据?就像一个在不同模块之间共享的全局数组,只是我不喜欢全局数据。我正在考虑制作一个单例类来提供对数据的访问,只是想看看是否有更好的解决方案/这已经完成了。
      • 你的意思是如何从每个组件中获取这些数据?您应该在创建时将该数据传递到您的组件/模块中。它比使用单例更清洁。
      【解决方案3】:

      有几种方法可以解决这个问题。出于封装目的,您应该将共享数据隔离到一个单独的类中;可能是一个值对象,尽管它不是必须的。

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

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

      【讨论】:

        【解决方案4】:
        package 
        {
            public class ApplicationViewModel
            {
                [Bindable] public var message:String = "";  
            }
        }
        

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

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

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

        【讨论】:

        • 应该始终放在匿名包中,还是在您当前调用的包中?
        猜你喜欢
        • 2017-10-19
        • 2020-08-31
        • 2018-02-17
        • 2020-11-08
        • 2017-10-25
        • 2018-03-05
        • 1970-01-01
        相关资源
        最近更新 更多