0

看起来为 PlaceHistoryMapper 生成的类被硬编码为使用 AbstractPlaceHistoryMapper 作为超类。

所以,我试图通过尝试用我使用延迟绑定的自定义映射器替换这个 AbstractPlaceHistoryMapper 来解决这个问题。我在我的 *.gwt.xml 中使用以下规则:

<replace-with class="com.google.gwt.place.impl.AbstractPlaceHistoryMapper">
   <when-type-is class="com.test.sampleapp.CustomPlaceHistoryMapper" />
</replace-with>

但由于某种原因,替换似乎没有发生。CustomPlaceHistoryMapper 没有被启动,生成的类仍然使用 AbstractPlaceHistoryMapper。

任何关于可能导致这种行为的想法/指针都非常感谢。

注意:我也在 GWT 组上发布了这个,但到目前为止还没有收到答复。

4

2 回答 2

1

要使延迟绑定工作,必须使用创建一个类GWT.create()。但是, AbstractPlaceHistoryMapper仅用作扩展类。所以它永远不会通过 GWT.create 创建,而是通过实例化子类来创建。因此,在这种情况下,延迟绑定将不起作用。如果你想要一个完全不同的实现,你必须实现一个 custom PlaceHistoryMapper,并自己管理已知的令牌。这也意味着您也不能使用历史注释。

作为旁注,您的规则中的类名应该交换。但是对于最终结果,这并不重要,因为它首先不起作用。

于 2011-02-15T08:14:52.300 回答
0

使用 GWT (2.0) 提供的开箱即用的 Place 相关类绝对有可能拥有自定义历史标记(例如,#mail#mail/bla代替 only )。#mail:inbox

AbstractPlaceHistoryMapper您可以实例化默认PlaceHistoryMapper传入它的构造函数,而不是替换您的PlaceHistoryMapper<T>or实现PlaceHistoryMapperWithFactory<T>

例如。:

final PlaceHistoryHandler placeHistoryHandler = new PlaceHistoryHandler(new CustomHistoryMapper());

然后,您将能够根据需要映射令牌。

我个人建议您在映射器自定义实现中使用唯一PlaceTokenizer的,这样我就不必在每个Places中都有一个内部PlaceTokenizer类。

希望有帮助。随时提出任何疑问。

于 2011-02-23T13:27:45.503 回答