GWT-EXT - 事件发生后,特定ContentPanel的小部件的最佳方法是什么?

StackOverflow https://stackoverflow.com/questions/111854

  •  02-07-2019
  •  | 
  •  

第一篇文章不要伤害我:)

我正在使用 BorderLayout 与通常的North,West,Center,South Panels。在 West ContentPanel 上,我有一个 Tree 。如果发生事件( OnClick ),我想在中心 ContentPanel 上显示一个特定的对话框。

对我来说,最好的方法是什么?目前我正在使用一个名为 returnPanel()的函数来返回中心 ContentPanel 。在事件处理程序中,我调用此函数(MainWindow.returnPanel()。add(myDialog))

有帮助吗?

解决方案

你这样做的方式直观且有效,但是当应用程序增长时会开始引起地狱,因为应用程序的不同部分是强耦合的。这个问题的解决方案是 MVC设计模式观察者设计模式

理想情况下,使用MVC模式,您不希望任何窗口小部件“知道”任何其他窗口小部件。只有类知道所有小部件,即Controller。每当一个小部件需要发送消息/发信号通知另一个小部件时,它就会告诉Controller类,它以适当的方式将消息中继到适当的小部件。通过这种方式,两个小部件被解耦,一个可以在不破坏另一个的情况下进行更改。您可能希望使用枚举枚举控制器必须响应的所有可能操作。

如果您的小部件在事件发生时只需要调用Controller,您可以简单地在其上调用一个恰当命名的(静态)方法并完成它。但是,只要需要通知多个其他类的事件,您最好使用Observer模式,它允许您在不更改类的情况下发出多个其他类的信号。它只是在eventHandler中调用notifyPObservers(),就是这样。有多少听众,他们是什么类型,是无关紧要的。这样,您还可以将类与其侦听器分离。即使只有Controller监听,也建议使用该模式,因为它清楚地将类别中的其他代码中的“回调”代码分开。

BTW,这与GWT甚至Java没有任何关系。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top