Java 注入后从DOM中删除GWT单例小部件

Java 注入后从DOM中删除GWT单例小部件,java,dom,gwt,uibinder,gwt-gin,Java,Dom,Gwt,Uibinder,Gwt Gin,我有一个共享的GWT小部件“HeaderView”,它是所有视图的标题。我通过GIN via将其实例化- bind(HeaderView.class).asEagerSingleton() 然后我可以像这样注入我的观点- @Inject public DashboardViewImpl(HeaderView headerView) { this.headerView = headerView; initWidget(dashboardViewUiBinder.createAndB

我有一个共享的GWT小部件“HeaderView”,它是所有视图的标题。我通过GIN via将其实例化-

bind(HeaderView.class).asEagerSingleton()

然后我可以像这样注入我的观点-

@Inject
public DashboardViewImpl(HeaderView headerView) {
    this.headerView = headerView;
    initWidget(dashboardViewUiBinder.createAndBindUi(this));
}
这在第一次显示视图时工作正常。但是,如果我更改位置,然后返回到“HeaderView”不再可见时已显示的视图。检查HTML显示它不再附加到DOM

我的观点是肯定的-

bind(DashboardView.class).to(DashboardView impl.class).in(Singleton.class)

我假设HeaderView在加载下一个页面后被从DOM中删除,因为小部件只允许有一个单亲


在GWT应用程序中,是否有一种正确的方式在所有视图之间共享小部件?

首先,编译器非常擅长优化代码,因此使小部件单一化不会在代码大小方面节省太多。它确实提高了性能,但除非小部件非常复杂,否则不会引起注意


在您的情况下,标题不应该是任何视图的一部分。您应该直接将其添加到您的应用程序小部件,即添加到根面板的小部件。然后,您的“视图”将占据浏览器窗口的剩余部分。当用户从一个视图导航到下一个视图时,您仍然可以告诉标题它需要知道的内容。

首先,编译器非常擅长优化代码,因此在代码大小方面,使小部件单一化不会节省太多。它确实提高了性能,但除非小部件非常复杂,否则不会引起注意

在您的情况下,标题不应该是任何视图的一部分。您应该直接将其添加到您的应用程序小部件,即添加到根面板的小部件。然后,您的“视图”将占据浏览器窗口的剩余部分。当用户从一个视图导航到下一个视图时,您仍然可以告诉标题它需要知道什么