如果要求两次或多次相同的CachingActivityMapper,则Place将返回相同的活动实例。但是,如果我要PlaceController一个等于当前位置的地方,PlaceChangeRequestEvent不会触发PlaceChangeEvent(最终不会触发goTo(...))。结果,监听这些事件的ActivityManager不会做任何事情,也就是说,在这种情况下,它甚至不会向CachingActivityMapper询问活动。

因此,我真的看不到CachingActivityMapper的意义。我想念什么吗?

最佳答案

单独使用CachingActivityMapper很少(没有)。它的真正含义是介于FilteredActivityMapper和您的ActivityMapper之间。

最初的用例是主从细节。例如,对于一个具有2个ActivityManager的邮件应用程序,一个用于邮件列表(主邮件),另一个用于特定邮件(详细信息),我们可以想象第三个带有菜单或树状视图的邮件。让我们专注于大师:


当前位置是MailBox("inbox")


FilteredActivityMapper将位置原样传递给基础CachingActivityMapper
实际的ActivityMapper返回“收件箱”中邮件列表的活动

用户单击列表中的邮件,然后转到新位置Message(box="inbox", id="123")


FilteredActivityMapper将地点转换为MailBox("inbox")
CachingActivityMapper返回缓存的活动,而不实际调用包装的ActivityMapper;因此ActivityManager不会停止并开始活动,也不会触摸它正在管理的HasOneWidget



可以有多种变体,例如,详细信息映射器可以缓存它看到的最后一个消息位置(该消息位置将不包含“邮箱”信息,即Message("123")),并且当它接收到一个邮箱位置时,它将会将Message地方传递给底层的CachingActivityMapper,后者将返回缓存的活动;这样一来,母版可以更改为新的邮箱,同时仍在详细信息面板中显示相同的消息(带有拆分显示的GMail的行为或多或少是这样的)。

09-27 22:49