Events GWT中带有LayoutPanels的事件处理

Events GWT中带有LayoutPanels的事件处理,events,gwt,tree,mvp,Events,Gwt,Tree,Mvp,我有一些关于GWT(2.1)与MVP和事件的问题 有DockLayoutPanel,里面有一些组件。西面是一个树组件,中间是一个SimplePanel。每个组件都有一个演示者和一个视图。问题是我想在presenter类中处理组件事件,但现在它们只能在容器(DockLayoutPanelPresenter)中捕获。我想在TreePresenter中处理树的事件。我认为TreePresenter应该处理它的“SelectedItem”事件,它可以把它放到eventbus上,这样我的其他组件就可以对它

我有一些关于GWT(2.1)与MVP和事件的问题

有DockLayoutPanel,里面有一些组件。西面是一个树组件,中间是一个SimplePanel。每个组件都有一个演示者和一个视图。问题是我想在presenter类中处理组件事件,但现在它们只能在容器(DockLayoutPanelPresenter)中捕获。我想在TreePresenter中处理树的事件。我认为TreePresenter应该处理它的“SelectedItem”事件,它可以把它放到eventbus上,这样我的其他组件就可以对它做出反应


还有其他人面对过吗?发布在GWT组列表上,但未收到回复。我认为这是解耦组件的一个重要主题

在这种情况下,页面的不同区域都有一个演示者,您可以使用GWT团队的David Chandler建议的方法:

你应该读这篇文章,但总的来说,你会这样做:

WestActivityMapper westActivityMapper = new WestActivityMapper(); 
WestActivityManager westActivityManager = new WestActivityManager(westActivityMapper, eventBus); 
westActivityManager.setDisplay(westPanel); 

EastActivityMapper EastActivityMapper = new EastActivityMapper(); 
EastActivityManager eastActivityManager = new  EastActivityManager(eastActivityMapper, eventBus); 
EastActivityManager.setDisplay(eastPanel);

dockLayoutPanel.addWest(westWidget, 50); 
dockLayoutPanel.addEast(eastWidget, 50); 
RootLayoutPanel.get().add(dockLayoutPanel); 
西部活动映射器将负责显示树,东部映射器将包含应用程序的主体


我们使用这种方法在west docked panel(不是树,但足够近)中显示项目列表,然后更新应用程序主体中显示的内容。当用户从列表中选择一个项目时,我们会触发一个新的地点事件,并将列表项目的id作为地点标记,以便用户可以使用“后退”按钮。但是,您也可以使用您指出的EventBus。

在这种情况下,页面的不同区域都有一个演示者,您可以使用GWT团队的David Chandler建议的方法:

你应该读这篇文章,但总的来说,你会这样做:

WestActivityMapper westActivityMapper = new WestActivityMapper(); 
WestActivityManager westActivityManager = new WestActivityManager(westActivityMapper, eventBus); 
westActivityManager.setDisplay(westPanel); 

EastActivityMapper EastActivityMapper = new EastActivityMapper(); 
EastActivityManager eastActivityManager = new  EastActivityManager(eastActivityMapper, eventBus); 
EastActivityManager.setDisplay(eastPanel);

dockLayoutPanel.addWest(westWidget, 50); 
dockLayoutPanel.addEast(eastWidget, 50); 
RootLayoutPanel.get().add(dockLayoutPanel); 
西部活动映射器将负责显示树,东部映射器将包含应用程序的主体


我们使用这种方法在west docked panel(不是树,但足够近)中显示项目列表,然后更新应用程序主体中显示的内容。当用户从列表中选择一个项目时,我们会触发一个新的地点事件,并将列表项目的id作为地点标记,以便用户可以使用“后退”按钮。但是,正如您所指出的,您也可以使用EventBus。

您能否进一步阐明您的设计?因此,您有一个TreePresenter,并附加了一个树作为它的视图。视图部分抛出一个事件,您想在presenter中捕获该事件吗?你说它只能在容器中被捕获是什么意思?我在这个帖子中输入了一个相当广泛的答案,解释了我是如何在gwt应用程序中解决分派的。也许这能帮到你?巴南已经给了你最好的答案,伊莫。使用事件总线使UI代码的不同部分相互协作,而不必相互了解。事件总线唯一的潜在问题是有一个非常健谈的应用程序,即触发太多的事件和太多必须响应的处理程序。一旦你到了那里,就要担心这个问题。你能再澄清一下你的设计吗?因此,您有一个TreePresenter,并附加了一个树作为它的视图。视图部分抛出一个事件,您想在presenter中捕获该事件吗?你说它只能在容器中被捕获是什么意思?我在这个帖子中输入了一个相当广泛的答案,解释了我是如何在gwt应用程序中解决分派的。也许这能帮到你?巴南已经给了你最好的答案,伊莫。使用事件总线使UI代码的不同部分相互协作,而不必相互了解。事件总线唯一的潜在问题是有一个非常健谈的应用程序,即触发太多的事件和太多必须响应的处理程序。一旦你到了那里,就要担心这个问题。