Adobe Flex:如何在TabNavigator上的3个选项卡之间共享数据

时间:2012-04-25 15:46:31

标签: actionscript-3 flex flash-builder flex4.5

我有一个带有4个标签的标签式对话框。父组件是mx:TabNavigator,每个选项卡的视图都是s:NavigatorContent中的自定义MXML组件。必须将3个选项卡的数据作为一个单元发送到后端服务。我正在尝试找出让3个选项卡访问要作为一个单元发送的数据的最佳方法。我目前有一个.mxml文件,用于定义顶级mx:TabNavigator,每个4个选项卡代表s:NavigatorContent在其自己的separate.mxml文件中定义,以保持文件大小相当短。我当前的方法是让每个选项卡从后端服务加载其creationComplete处理程序中的数据,并将其存储在3个选项卡共享的数据模型的公共类中。这个解决方案没问题,除了:

  1. 第一个选项卡的创建完成处理程序在应用程序启动时调用,即使它不是第一个可见组件(即,用户首先看到UI的其他部分)。我倾向于使用真正的延迟加载,直到用户可以看到选项卡才会加载数据。
  2. 如果用户在第一个选项卡上编辑数据,然后第一次导航到第二个选项卡而不点击应用按钮,则第一个选项卡中的更改将丢失,因为第二个选项卡的创建完成处理程序将加载数据模型由3个标签共享。
  3. 我理想的是:

    1. 真正的懒惰装载;在用户单击选项卡并且它变为可见之前,不会加载数据。
    2. 拥有它,以便当用户点击3个选项卡中的任何一个时,3个选项卡中每个选项卡上的当前条目将被发送到后端服务。
    3. 非常感谢有人可以就此提出建议。如果需要,我可以进一步详细解释。

1 个答案:

答案 0 :(得分:1)

  

我正在尝试找出让3个标签访问数据的最佳方法   这将作为一个单位发送。

最好总是主观的。最简单的方法是为共享数据创建单个变量,并将该实例传递到每个相关选项卡。

在某些情况下,您可以将数据存储在某个中心位置,并使用依赖注入将该数据注入需要它的相关选项卡组件。依赖注入由一堆Flex框架实现,例如RobotLegs或Swiz。

另一种选择是在类上使用Singleton方法或静态变量来共享多个选项卡之间的数据。

  

我目前的做法是让每个标签加载他们的数据   后端服务在他们的creationComplete处理程序中

为什么要使用creationComplete?在组件完成它的子项的布局例程和布局例程之后触发creationComplete事件,然后一切就绪可以使用了。我假设加载更多数据的行为将迫使您的许多组件必须再次完成渲染过程。您可以考虑在生命周期中将其移动到较早的位置,例如初始化或预初始化。

  

1)调用第一个选项卡的创建完成处理程序   应用程序启动,即使它不是第一个可见组件   (即,用户首先看到UI的其他部分)。 ID   喜欢在没有加载数据的情况下进行真正的延迟加载   该选项卡对用户可见。

这是预期的行为,基于TabNavigators初始化的方式。您可以查看creationPolicy以获取更多信息。您可以重写“加载数据”方法来操作组件的show方法吗?

  

2)如果用户在第一个选项卡上编辑数据,则导航到   第二个选项卡第一次没有按下应用按钮,   第一个选项卡中所做的更改将丢失,因为创建完成   第二个选项卡的处理程序将加载由3个选项卡共享的数据模型。

您可以强制在组件的hide事件上保存数据。或者可能是TabNavigator的更改事件。