0

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

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

我理想中想要的是:

  1. 真正的延迟加载;直到用户单击选项卡并且它变得可见时才会加载数据。
  2. 拥有它,这样当用户在 3 个选项卡中的任何一个上点击应用时,3 个选项卡中的每个选项卡上的当前条目都会被发送到后端服务。

如果有人能就此提出建议,非常感谢。如果需要,我可以更详细地解释。

4

1 回答 1

1

我正在尝试找出让 3 个选项卡访问要作为一个单元向下发送的数据的最佳方法。

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

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

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

我目前的方法是让每个选项卡在它们的 creationComplete 处理程序中从后端服务加载它们的数据

为什么使用creationComplete?在组件完成了它的布局例程和它的子级的布局例程之后,会触发 creationComplete 事件,然后一切都可以使用了。我假设加载更多数据的行为将迫使你的许多组件不得不再次经历它们的渲染过程。您可以考虑在生命周期中将其移至更早的位置,例如初始化或预初始化。

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

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

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

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

于 2012-04-25T16:10:28.893 回答