我有一个共享的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应用程序中的所有视图之间共享窗口小部件?
答案 0 :(得分:2)
首先,编译器非常擅长优化代码,因此制作小部件单例并不会在代码大小方面节省太多。它确实提高了性能,但除非窗口小部件非常复杂,否则它不会引人注意。
在您的情况下,标题不应该是任何视图的一部分。您应该将其直接添加到您的应用小部件,即您添加到RootPanel的小部件。然后您的“视图”将占用浏览器窗口的剩余部分。当用户从一个视图导航到下一个视图时,您仍然可以告诉您的标题需要知道的内容。