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

时间:2008-09-21 19:38:45

标签: gwt gwt-ext

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

我正在使用BorderLayout与通常的北,西,中,南小组。在 West ContentPanel上,我有一个Tree。如果发生了一个事件(OnClick),我想在中心 ContentPanel上显示一个特定的对话框。

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

1 个答案:

答案 0 :(得分:1)

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

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

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

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