Flex演示模型:应该在视图中保持状态吗?

时间:2013-02-16 00:28:18

标签: flex singleton state presentation-model

我有两个视图实例,分别是V1a和V1b。由于它们是相同类型的实例,因此它们都使用相同的表示模型实例(PM1),因为它作为单例注入每个实例。每个视图显示不同的状态(V1a为S1a,V1b为S1b),但在这两个视图之间切换(例如当它们在TabNavigator中时)将产生奇怪的结果:

  1. 用户查看 V1a ,并在 S1a 中看到状态;
  2. 用户查看V1b并查看S1b的状态;
  3. 用户再次查看 V1a ,但这次会看到 S1b 的状态。
  4. 这是因为S1b覆盖了PM1单例中的状态,因此当重新打开V1a时,视图显示V1b的状态。我有三个解决方案:

    1. 不要注射单身人士!但这似乎是最常见的做法;
    2. 当用户切换视图时,它会将其数据重新注入PM1。在层次结构视图中,这可能会变得复杂,其中顶层具有状态并且需要将其注入底层。需要更多关注绑定;
    3. 在视图中保持状态,并在视图要执行时将其传递给PM。
    4. 解决方案3似乎是最简单的。然而,我所阅读的有关演示模型的所有内容都倾向于表明状态存在于演示模型中。谁能告诉我哪里出错了?据我所知,在视图中保持状态比在演示模型中更容易和更安全。

1 个答案:

答案 0 :(得分:0)

解决方案1是一个很好的解决方案 - 将PM类配置为不是单例。不幸的是,据我所知,Tide框架不支持这一点。其他DI框架将 - 例如,Parsley(不再维护)支持每次都注入新实例的DynamicObject。 RobotLegs(维护)有一个mapClass注入器映射,它会为每次注入提供一个新实例。

解决方案2听起来很混乱。

如果Tide框架不会为您提供动态对象,则解决方案3听起来不错。