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