1

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

  1. 用户查看V1a并看到S1a中的状态;
  2. 用户查看 V1b 并看到 S1b 的状态;
  3. 用户再次查看V1a,但这次看到的是S1b的状态。

这是因为 S1b 覆盖了 PM1 单例中的状态,因此当重新打开 V1a 时,视图会显示来自 V1b 的状态。我有三个解决方案:

  1. 不要注入单例!但这似乎是最常见的方式;
  2. 当用户切换视图时,它会将其数据重新注入 PM1。在顶层具有状态并需要将其注入底层的分层视图中,这可能会变得复杂。绑定需要更加小心;
  3. 保持视图中的状态,并在视图要采取行动时将其传递给 PM。

解决方案 3 似乎是最简单的。然而,我所读到的关于演示模型的所有内容都倾向于表明状态保存在演示模型中。谁能告诉我哪里出错了?据我所知,在视图中保存状态比在表示模型中要容易和安全得多。

4

1 回答 1

0

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

解决方案 2 听起来很乱。

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

于 2013-09-11T21:58:57.630 回答