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

时间:2016-12-18 14:56:54

标签: java dom gwt uibinder gin

我有一个共享的GWT小部件" HeaderView"这是所有视图的标题。我通过GIN实例化它 -

products_details

然后我可以注入我的观点 -

bind(HeaderView.class).asEagerSingleton();

第一次显示视图时,此方法正常。但是,如果我更改位置然后返回到已经显示的视图,那么" HeaderView"不再可见。检查HTML显示它不再附加到DOM。

我的观点被视为单身人士 -

@Inject public DashboardViewImpl(HeaderView headerView) { this.headerView = headerView; initWidget(dashboardViewUiBinder.createAndBindUi(this)); }

我假设在加载下一页后,正在从DOM中删除HeaderView,因为小部件只允许拥有单个父级。

是否有正确的方法在GWT应用程序中的所有视图之间共享窗口小部件?

1 个答案:

答案 0 :(得分:2)

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

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