Events 在GWT应用程序中,我应该使用不同的事件(和事件处理程序)切换到每个视图吗?

Events 在GWT应用程序中,我应该使用不同的事件(和事件处理程序)切换到每个视图吗?,events,gwt,mvp,Events,Gwt,Mvp,我正在GWT中编写一个菜单,它根据单击的条目打开一个视图。问题是我有很多不同的观点(~20) 现在的设计是:菜单使用eventBus触发事件,AppController捕获事件,将其添加到历史记录中,并打开正确的演示者(将其传递到正确的视图) 我不确定再创建很多事件,比如“gotoxx1”、“gotoxx2”等等。这是正确的方法,我应该使用一个带参数的事件吗?我做错了吗?在将iframe嵌入html后,可以使用历史记录.newItem()和历史记录.addValueChangeHandler()

我正在GWT中编写一个菜单,它根据单击的条目打开一个视图。问题是我有很多不同的观点(~20)

现在的设计是:菜单使用eventBus触发事件,AppController捕获事件,将其添加到历史记录中,并打开正确的演示者(将其传递到正确的视图)


我不确定再创建很多事件,比如“gotoxx1”、“gotoxx2”等等。这是正确的方法,我应该使用一个带参数的事件吗?我做错了吗?

在将iframe嵌入html后,可以使用
历史记录.newItem()
历史记录.addValueChangeHandler()

<iframe src="javascript:''"
          id="__gwt_historyFrame"
          style="width:0;height:0;border:0"></iframe>


是的,我不太确定这是正确的方法:

我会这样做:

  • 创建一个带有键“#-url”的hashmap,如#view1、#page1等,并为视图赋值 HashMap mapView=新建HashMap(); 如果您的视图不是复合视图,请使用Widget或任何基类

  • 在菜单上,使用Anchor类和do.setHref(“view1”)、.setHref(“page1”)等

  • 添加一个History.addValueChangeHandler(yourAppController)

  • 捕获历史事件时,获取值,然后执行mapView.get(historyEvent)

  • 绘制从hashmap获得的视图

  • 只有当一个演示者可以观看20个视图时,该解决方案才有效。如果每个视图都有不同的演示者,则这不起作用。否则,您还必须为20位演示者制作一张地图。第二个问题是,您创建了20个视图实例,这些实例可能永远不会被使用。