我真的不明白PlaceTokenizer在做什么?
他是否将场所的类名称转换为字符串,以便gwt历史记录机制可以使用它将其放入浏览器的url中?
多数民众赞成在我的理解,但我不确定这是否是正确的。
最佳答案
首先,PlaceTokenizer
仅与PlaceHistoryMapper
的生成器结合使用(即,如果GWT.create()
扩展了PlaceHistoryMapper
的接口;则可以根据需要随意在具体类中实现该接口)。生成器强制历史标记(URL中#
之后的部分)由前缀和位置标记组成。该前缀用于与给定的PlaceTokenizer
类型匹配,或者由令牌生成器上的@Prefix
注释指定,或者默认为令牌生成器处理的场所的简单名称。
解析历史令牌时(在初始化时调用handleCurrentHistory()
或使用浏览器的历史记录进行导航时),在将前缀与PlaceTokenizer
匹配并且已检索到该令牌生成器的实例之后(从工厂(如果使用PlaceHistoryMapperWithFactory
或使用其默认的零参数构造函数创建),则将位置标记传递给getPlace
方法,并且令牌生成器应实例化与该位置标记对应的位置。
序列化地点时(当您在应用程序中浏览PlaceController#goTo(Place)
时),将根据地点的类型(与令牌化程序的通用参数匹配)检索令牌生成器,并将该地点分配给getToken
期望返回该地点的地点令牌。然后PlaceHistoryHandler
将在前缀之前并更新URL。
地点令牌可以是任何东西,但是基于地点(其字段)所包含的数据,而不是其类型(反映为历史令牌的前缀)