我有一个共享的GWT窗口小部件" Headerview",它是所有视图的标题。我通过杜松子酒实例化 -
bind(HeaderView.class).asEagerSingleton();
我可以像这样注入我的观点 -
@Inject
public DashboardViewImpl(HeaderView headerView) {
this.headerView = headerView;
initWidget(dashboardViewUiBinder.createAndBindUi(this));
}
这首先显示视图。但是,如果我更改位置,然后返回到"头听图"不再可见后已经显示的视图。检查HTML表明它不再附在DOM上。
我的观点被绑定为单例 -
bind(DashboardView.class).to(DashboardViewImpl.class).in(Singleton.class);
我假设在加载下一页后,由于允许小部件仅具有单亲父母,因此正在从DOM上删除头部。
。是否有正确的方法可以在GWT应用程序中所有视图之间共享一个小部件?
首先,编译器非常擅长优化代码,因此制作窗口小部件Singleton不会在代码大小方面节省太多。它确实提高了性能,但是除非小部件非常复杂,否则它不会引起注意。
在您的情况下,标题不应成为任何视图的一部分。您应该将其直接添加到应用程序小部件,即将其添加到rootpanel中。然后,您的"视图"将占据浏览器窗口的其余部分。您仍然可以告诉您的标题,当用户从一个视图导航到下一个视图时,需要知道什么。