用户界面——这是一个可接受的GWT解决方案吗?



我想创建一个GWT UI,我基本上将有一个单一的HTML页面加载PanelA对象。然后用户将做他们的事情,并最终执行将他们移动到另一个视图/屏幕的操作。
我已经简化了我现有的视图,只包含一个按钮,将用户移动到下一页等简单,我只有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

我使用"Activities and Places"来管理所有这些,它在生产环境中已经运行了一年左右了。

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

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

我推荐活动和场所设计模式。

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

我建议你参考"框架来创建GWT项目,GWTP目前支持的一些特性:

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

所以你的问题和查询就像单例UI视图,处理历史/面包屑跟踪和单例类型模式的最佳方式,将覆盖和一个好的框架将使项目管理变得容易。

相关内容

  • 没有找到相关文章

最新更新