java - GWT 单例小部件在注入(inject)后从 DOM 中删除

标签 java dom gwt uibinder gwt-gin

我有一个共享的 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/

相关文章:

javascript - 请帮助!:为什么我的JavaScript中没有音频?

javascript - 类列表和滚动事件

java - 对所有元素求和 java arraylist

java - 正则表达式替换字符串中的所有\n,但不替换 [code] [/code] 标记中的那些

java - 是否可以在右键菜单顶部创建一个窗口?

gwt 中小部件的 CSS

java - 如何在 GWT 中使用外部服务器端 jar?

java - 表渲染器在 Java 中无法正常工作

javascript - 在 HTML 中获取输入并使用 javascript,对其进行处理并将新变量发送回 html

java - 如何获得焦点所有者?