2012-09-24 125 views
1

我有一个应用程序设计如下。 这是一个旅游理赔报销应用程序。它有两个标签:嵌套在gwt活动和地方的活动和历史

  1. 我的版权声明:显示所有报销迄今所取得
  2. 我的账户:显示我的详细信息

它在左侧索赔的数量和选择时显示的条目上正确的。

我提出了以下观点。

  • AppView:为整个应用程序,其具有标签面板和突
  • MyAccountsView:为下我的账户标签内容。
  • MyClaims View:用于Myclaims标签下的内容。这有两个面板。左边的那个装载着索赔。在选择要求查看之前,权利是空的。
  • SelectedClaimView:为面板上的右手侧,显示选择的权利要求的claimentries ..

每个视图具有correponding地方和活性。

这些都是下述要求之一,我越来越困难,同时创造我的应用程序:

当我点击左侧面板上的要求右侧面板必须显示内selectedClaimView要求的条目。当我点击另一项索赔时,该清单必须填写该索赔的内容。我也想要这个索赔选择的历史支持。

我面临以下问题而设计:

  1. 如何添加内嵌活动。例如当我选择MyClaimsTab时,所有声明都必须在左侧面板中加载。在选择索赔时,索赔条目必须通过选定的索赔视图在右侧面板加载。然而,调用活动并更改地点可以停止调用活动。

  2. 此外,两个选项卡中的活动都必须同时运行,并且必须在标签开关之间保留历史记录。这是我不知道该怎么做,并会赞赏建议。

+1

“标签开关之间必须保持历史记录”这是什么意思?在更改标签后,您希望后退按钮如何操作? –

+0

当我切换选项卡并按下返回按钮时,它必须显示前一个选项卡为活动状态,并且地点标记必须相应更改。 – user1687886

回答

-1

我希望我能指出你在正确的方向。

  1. 有无数的方法来实现逻辑。我会建议阅读命令设计模式(谷歌它,你会发现很好的资源)

  2. 如果你的意思是浏览器的历史记录见DevGuide。 如果你的意思是简单地记住用户选择了什么选项。然后简单写你自己的班级,它可以记住它,这也可能帮助你1 ..

1

你的要求很简单,所以应该是你的设计。您只需要两个活动和两个视图:AccountView和ClaimsView。

您需要一个简单的小部件 - 一个带有两个标签样式的FlowPanel作为标签 - 作为导航菜单。您将这个小部件放在两个视图的顶部,并将ClickHandler附加到与其他视图相对应的标签 - 即在AccountView中将处理程序附加到声明标签,从而触发presenter.goTo(新ClaimsTab(“”)。声明标签应该被设计为ClaimsView中的按下标签和AccountView中的Account标签。这需要导航:不需要特殊的活动。

AccountView很简单:导航小部件在顶部,细节如下。对于ClaimsView使用LayoutPanel分为三层:导航窗口小部件的顶层,声明的左层,以及详细信息的右层。让我们假设您为索赔使用树,并使用包装在ScrollPanel中的FlowPanel(“claimDetailsPanel”)索取详细信息。

您的ClaimsView应该有一个“初始化”的标志(带有吸气和吸气器)。当用户访问ClaimsTab时,您可以开始您的ClaimsActivity。此活动获得对ClaimsView的引用。它检查ClaimsView是否被初始化。如果不是,则加载声明列表并填充声明树。在构建树时,将每个声明设置为每个TreeItem的用户对象。然后将初始化标志设置为true。

您将选择处理程序附加到调用presenter.goTo的树中(新的ClaimsTab(selectedClaim.getId()。toString()));

这会将用户返回到同一个标签,但是使用新的URL标记 - 如果选定的标识为id = 123,您将看到#ClaimsTab:123标记。屏幕上不会闪烁,因为ClaimsView已经建好并保持可见。

现在您将运行一个新的ClaimsActivity。该活动注意到(a)存在需要处理的令牌,并且(b)因为视图被初始化,所以不需要加载声明并填充声明树。您的活动应解析令牌(将其转换为声明ID),加载此声明的详细信息,并将此信息提供给ClaimsView以填充claimDetailsPanel(您应首先清除它,因为它可能包含前一个声明的内容)。

一个小细节。用户可以为任何索赔添加书签。因此,如果您的ClaimsActivity构建声明树,它应该检查令牌。书签页面会有一个标记,所以活动应该告诉视图选择哪个树项目。

这是它:两个视图,两个活动。没有嵌套。

0

Slotted框架允许您轻松地做到这一点。 (免责声明:我写了Slotted)。让我描述一个简单的方法去做你想做的事。定义你的主AppPlace这样的:

public class AppPlace extends SlottedPlace { 
    public static final Slot TabsSlot = new Slot(new AppPlace(), new MyClaimsPlace()); 

    @Override public Slot getParentSlot() { 
     return SlottedController.RootSlot; 
    } 

    @Override public Slot[] getChildSlots() { 
     return new Slot[] {TabsSlot}; 
    } 
} 

这告诉开槽的框架,您AppPlace都有一个可以由当前视图内的另一个活动的插槽。

在您需要扩展SlottedPlace和重写此方法的AppActivity:

@Override public void setChildSlotDisplay(Slot slot) { 
    slot.setDisplay(tabsSlotWidget); 
} 

tabsSlotWidget将是一个SimplePanel或SimpleLayoutPanel将被用作新的活动的容器。在AppPlace中可以有两个插槽,并且您也可以在MyClaimsPlace中插入插槽。有一个SlottedTab小部件,它提供与TabPanel类似的功能,但允许每个选项卡都是一个Activity。

除了上述变化,活动的工作一样GWT一个& P.您也可以在里面开槽运行现有的A & P位,只升级需要嵌套的活动。

  1. 这允许多个活动在同一时间,这正常GWT一个& P不能够启动。如果您致电活动中的相同级别的地方,则该地点只会替换该活动,并且仍然保留层次结构的其余部分。

  2. 槽位将处理整个层次结构的历史记录,因此无论嵌套有多少级别/宽度,历史记号都将允许重新创建历史记号。