我有一个共享的 GWT 小部件“HeaderView”,它是所有 View 的标题。我通过 GIN 实例化它 -
bind(HeaderView.class).asEagerSingleton();
然后我可以像这样注入(inject)我的 View -
@Inject
public DashboardViewImpl(HeaderView headerView) {
this.headerView = headerView;
initWidget(dashboardViewUiBinder.createAndBindUi(this));
}
第一次显示 View 时效果很好。但是,如果我更改位置,然后返回到“HeaderView”不再可见时已显示的 View 。检查 HTML 显示它不再附加到 DOM。
我的 View 被绑定(bind)为单例 -
bind(DashboardView.class).to(DashboardViewImpl.class).in(Singleton.class);
我假设由于只允许小部件有一个父级,因此在加载下一页后 HeaderView 将从 DOM 中删除。
是否有在 GWT 应用程序中的所有 View 之间共享小部件的正确方法?
最佳答案
首先,编译器非常擅长优化代码,因此制作一个小部件单例不会在代码大小方面节省太多。它确实提高了性能,但除非小部件非常复杂,否则不会明显。
在您的情况下,标题不应成为任何 View 的一部分。您应该将其直接添加到您的应用程序小部件中,即添加到 RootPanel 中的小部件。然后您的“ View ”将占据浏览器窗口的剩余部分。当用户从一个 View 导航到下一个 View 时,您仍然可以告诉标题需要了解什么。
关于java - GWT 单例小部件在注入(inject)后从 DOM 中删除,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41209598/