0

嗨,我是 GWT MVP 模式的新手。我来自 asp.net 背景,目前我正在研究 GWT,我被要求创建一个母版页,其中包含所有视图应该共有的菜单项。最初,我使用https://developers.google.com/web-toolkit/articles/mvp-architecture-2创建了一个示例 mvp 项目,并且可以从一个视图导航到另一个视图。如何保持一个视图不变并根据我们单击的菜单项不断更改其他视图。请帮忙

4

3 回答 3

0

您将屏幕划分为两个或更多区域,并为每个区域分配专用的 ActivityMapper 和 ActivityManager。例如,一个区域可以是带有 MenuActivityManager 的“菜单”,而另一个区域可以是带有 BodyActivityManager 的“body”。

这是一个很好的解释: http ://blog.ltgt.net/gwt-21-activities-nesting-yagni/

请注意,使用此方法有利也有弊。浏览器需要几毫秒来呈现标准的 html。创建一个小部件 mainMenu 并将它(最好是使用 UiBinder)包含到每个视图中可能会更容易,而不是处理两个活动管理器。

于 2012-07-23T11:07:57.080 回答
0

您提到的文章来自在 GWT 中添加 MVP 支持之前。它擅长解释概念,但实际实现用处不大。要继续查看有关活动的 GWT 文档:https ://developers.google.com/web-toolkit/doc/latest/DevGuideMvpActivitiesAndPlaces 。在那里,您还将找到解决问题的方法。简而言之,看看ActivityManager. 这管理所有活动。在活动管理器上,您设置一个对所有活动都是静态的小部件。这个小部件必须有一个方法setWidget(实际上它必须实现AcceptsOneWidget)。在您的每个活动实现中,您都可以通过start方法。通过在 start 方法中使用该活动的特定视图调用 setWidget,您可以设置活动特定视图。这一切都非常简要地描述,但如果您阅读提到的文档,您应该了解这个概念。

于 2012-07-23T12:02:38.640 回答
0

如果您正在使用UiBinder,您的ui.xml文件应该是这样的,

 <!DOCTYPE ui:UiBinder SYSTEM "http://dl.google.com/gwt/DTD/xhtml.ent">
 <ui:UiBinder xmlns:ui="urn:ui:com.google.gwt.uibinder"
  xmlns:g="urn:import:com.google.gwt.user.client.ui">

<ui:style>
</ui:style>

<g:DockLayoutPanel unit="EM">
    <g:north size="4">
        //Add Logo, menus or what you want to be displayed for all the pages 
    </g:north>
    <g:center>
        //Add code for your desired UI. In java code you change the UI by this "flowpanel"
        For eg: <g:FlowPanel ui:field="flowpanel" />
    </g:center>
</g:DockLayoutPanel>

<g:center>然后,每次您都可以像这样使用您的 java 代码清除并添加要在视图中显示的小部件flowpanel.clear(); flowpanel.add(anyWidget you need)

<g:north>静态视图和动态视图也是如此<g:center>。现在您将获得所需的页面。因为您每次只能更改您的视图<g:center>

像这样,您可以添加<g:east>,如果需要。<g:west>g:south>

如果您不使用 UiBinder,请在您的 java 代码中执行以下操作,

    final DockLayoutPanel dockLayoutPanel = new DockLayoutPanel(Style.Unit.EM);
    dockLayoutPanel.addNorth(any widget you need, "4"); //NorthPanel
    dockLayoutPanel.add(any widget you need);   //CenterPanel

"4"面板的大小在哪里,你可以改变它。

像这样dockLayoutPanel.addWest(any widget you need, "4"); //WestPanel dockLayoutPanel.addEast(any widget you need, "4");//EastPanel
dockLayoutPanel.addSouth(any widget you need, "4"); //SouthPanel

我希望你现在明白了。

于 2012-10-18T07:14:01.103 回答