如果要求两次或多次相同的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的行为或多或少是这样的)。