所以我想我找到了问题的根源。
我读了这个问题
http://code.google.com/p/gwt-platform/issues/detail?id=127
在其中一篇文章中,展示了如何创建自定义 RootPresenter。RootPresenter 还包含一个 RootView,其中放置了上述setInSlot
方法,并且通过编写自定义视图,可以覆盖该方法,并确保draw()
在 SmartGWT 布局上调用该方法,而不是添加到RootPanel.get().add(...);
我的 impl 看起来像这样:
public class CustomRootPresenter extends RootPresenter
{
public static final class CustomRootView extends RootView
{
@Override
public void setInSlot(Object slot, Widget content)
{
if (content instanceof Layout)
{
// clear
RootLayoutPanel.get().clear();
RootPanel.get().clear();
Layout layout = (Layout) content;
layout.draw();
}
else
{
super.setInSlot(slot, content);
}
}
}
@Inject
public CustomRootPresenter(EventBus eventBus, CustomRootView myRootView)
{
super(eventBus, myRootView);
}
}
请记住在您的 GIN 模块中注入自定义根演示者:
// don't use install, when using custom RootPresenter
// install(new DefaultModule(ClientPlaceManager.class));
bind(EventBus.class).to(SimpleEventBus.class).in(Singleton.class);
bind(TokenFormatter.class).to(ParameterTokenFormatter.class).in(Singleton.class);
bind(CustomRootPresenter.class).asEagerSingleton();
bind(PlaceManager.class).to(ClientPlaceManager.class).in(Singleton.class);
bind(GoogleAnalytics.class).to(GoogleAnalyticsImpl.class).in(Singleton.class);
它确实解决了我将 GWT 小部件添加到 SmartGWT 布局的问题。
感谢让-米歇尔·加西亚(Jean-Michel Garcia)将我推向正确的方向!:)