1

我想创建一个 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 按需要工作。我的问题是,这种单例类型模式是正确或正确的方法吗?即有一堆单例 UI 视图在主面板上弹出/弹出?此外,通过 GWT 应用程序处理历史/面包屑跟踪的最佳方式是什么,即允许用户返回上一个屏幕,记住他们可能从 PanelA、PanelB 或 PanelC 导航到 PanelX

4

3 回答 3

3

我使用“活动和地点”来管理所有这些,并且它在生产中运行了一年左右。

https://developers.google.com/web-toolkit/doc/latest/DevGuideMvpActivitiesAndPlaces

我认为为您的视图使用单例机制很好,但您必须确保完全重置您存储的任何状态。对我来说,每次用户导航到新位置时创建新视图会更容易,然后如果我检测到加载时间问题或其他问题,可以追溯导致视图重用其组件。我建议您先让导航正常工作,然后再担心单例(或不)优化。

于 2012-12-26T23:16:07.470 回答
1

我推荐活动和地点设计模式

它涵盖了您在问题中提出的所有问题,以及您尚未想到(或未询问)的更多问题,例如本机浏览器历史管理和在应用程序中为不同位置添加书签的能力、页面重新加载处理、高效内存管理与优化的 DOM 操作、可扩展性(构建具有数十个/数百个视图且代码重复最少的应用程序)、可测试性和代码拆分(在哪里拆分大型应用程序)。

于 2012-12-26T23:52:13.893 回答
0

建议你参考“ GWTP ”框架做一个GWT项目,GWTP目前支持的一些特性:

  • 通过 GIN 和 Guice 进行依赖注入;
  • 简单但强大的历史管理机制;
  • 支持嵌套演示者;
  • 演示者和视图的延迟实例化;
  • 轻松高效的代码拆分;
  • 支持撤消/重做的集成命令模式;

因此,您的问题和查询(如 Singleton UI 视图、处理历史/面包屑跟踪和单例类型模式的最佳方式)将涵盖并且一个好的框架将使项目管理变得容易。

于 2012-12-27T04:58:43.677 回答