Gwt 网站,每页两个复合。因为糟糕的设计?

Gwt 网站,每页两个复合。因为糟糕的设计?,gwt,mvp,browser-history,Gwt,Mvp,Browser History,我第一次使用GWT创建了一个网站。应用程序有两个复合类,其中一个是菜单,另一个是我显示已单击的特定菜单的de信息的地方。我正在使用MVP、类历史记录和接口ChangeValueHandler在不同页面之间切换 我为每个组合都有一对presenter视图。应用程序开始很好地创建菜单和部分信息。当您在菜单中单击时,它可以正常工作,显示信息,并且令牌浏览器已更改。问题是,如果你加载一个页面(例如:myapp.com#register)而不加载主页,它不会显示菜单。它加载复合节信息,但不加载复合菜单(复

我第一次使用GWT创建了一个网站。应用程序有两个复合类,其中一个是菜单,另一个是我显示已单击的特定菜单的de信息的地方。我正在使用MVP、类历史记录和接口ChangeValueHandler在不同页面之间切换

我为每个组合都有一对presenter视图。应用程序开始很好地创建菜单和部分信息。当您在菜单中单击时,它可以正常工作,显示信息,并且令牌浏览器已更改。问题是,如果你加载一个页面(例如:myapp.com#register)而不加载主页,它不会显示菜单。它加载复合节信息,但不加载复合菜单(复合菜单是用myapp.com#home加载的)


我认为这是因为应用程序的设计不好,但我不知道如何用其他方式做到这一点。如果应用程序只有一个组合,这不会是一个问题,但当每个页面有2个或更多组合时,我不知道如何管理整个过程以正常工作

您应该在每个页面中包含菜单,而不是在主页中创建一次菜单,然后将其保留在屏幕上。我假设您创建了菜单,并通过

RootPanel.get().add(myMenuWidget); 

如果您使用的是UIBinder,那么在每个页面中包含菜单应该非常简单,只需在页面的每个.ui.xml文件中添加相应的标记即可。

由于缺少代码,很难判断到底是什么错误。所以我猜。您应该设计为对PlaceChangeEvent而不是ValueChangeEvent进行操作。这意味着菜单单击应该触发位置更改,然后应用程序将处理此事件。这样,就可以从内容页中解除菜单操作的绑定。并将每一页视为一个单独的实体。还可以看看GWT活动机制,看看它如何帮助拥有一个始终不变的主页,以及主页上根据实际显示的页面而变化的内容区域。

昨天,我更改了代码以添加活动和中提到的所有内容,但现在我有一个大问题:我的活动不会消亡。即使在方法mayStop()中调用方法onStop(),它们也会死掉。我的活动映射器工作正常,但我不知道为什么活动保持活动状态,这是一个问题,因为它们仍然从视图接收事件。您必须从活动中的start方法使用事件总线,而不是从ClientFactory使用事件总线。如果这不是问题,那么我不理解你的问题。例如,视图如何生成事件?它对用户仍然可见吗?我指的是UI事件,比如ClickEvent。我必须删除演示者的mayStop()方法中的所有处理程序。有了这个补丁,至少演讲者不会做我不希望他们做的事情,尽管他们还活着。它们进入了mayStop()方法,但是在那之后,由于未知的原因,它们没有完成。