我想创建一个GWT UI,我基本上会有一个加载PanelA对象的HTML页面。然后,用户将执行他们的操作并最终执行将其移动到另一个视图/屏幕的操作 我已经简化了我现有的视图,只包含一个按钮,将用户移动到下一页等。为简单起见,我只有2个视图可以启动。 这是我的入门点。
public class StockWatcher implements EntryPoint
{
public void onModuleLoad()
{
final RootPanel rootPanel = RootPanel.get();
rootPanel.add( PanelA.getInstance() );
}
}
这是PanelA类
public class PanelA extends HTMLPanel
{
private static PanelA panel;
private PanelA()
{
super("Panel A");
final RootPanel rootPanel = RootPanel.get();
Button btnNewButton = new Button("Go to panel B");
btnNewButton.addClickHandler(new ClickHandler() {
public void onClick(ClickEvent event)
{
rootPanel.clear();
rootPanel.add( PanelB.getInstance() );
}
});
add(btnNewButton);
}
public static PanelA getInstance()
{
if (panel == null)
{
panel = new PanelA();
}
return panel;
}
}
我的其他PanelB类与PanelA几乎相同,即将我带回PanelA的按钮 我的UI按需运行。 我的问题是,这种单例类型模式是正确或正确的方法吗?即拥有一堆Singleton UI视图,可以在主面板上打开/关闭? 此外,通过GWT应用程序处理hitory / breadcrumb跟踪的最佳方法是什么,即允许用户返回到前一个屏幕,同时考虑到他们可以从PanelA,PanelB或PanelC导航到PanelX
答案 0 :(得分:3)
我使用“活动和场所”来管理所有这些,并且它在生产中运作了一年左右。
https://developers.google.com/web-toolkit/doc/latest/DevGuideMvpActivitiesAndPlaces
我认为对您的视图使用Singleton机制很好,但您必须确保完全重置您存储的任何状态。对我来说,每次用户导航到新位置时更容易创建新视图,然后如果我检测到加载时间或某些事情的问题,则追溯性地导致视图重新使用其组件。我建议你先让导航工作,然后再担心单例(或不是)优化。
答案 1 :(得分:1)
我建议Activities and Places design pattern。
它涵盖了您在问题中提出的所有问题,以及您还没有想到(或者没有询问过)的更多问题,例如本机浏览器历史记录管理以及为应用内的不同位置添加书签的能力,页面处理重新加载,高效的内存管理与优化的DOM操作,可扩展性(使用最少的代码重复构建具有数十/数百个视图的应用程序),可测试性和代码分割(在哪里拆分大型应用程序)。
答案 2 :(得分:0)
我建议您引用“GWTP”框架来制作GWT项目,这是GWTP目前支持的一些功能:
因此,您的问题和查询(如Singleton UI视图,处理hitory / breadcrumb跟踪和单例类型模式的最佳方法)将涵盖,一个好的框架将使项目管理变得简单。