GWT 中的小部件应如何通知其他小部件刷新自身或执行其他操作。

我应该使用sinkEvent / onBrowserEvent吗?如果是这样,有没有办法创建自定义事件?

有帮助吗?

解决方案

我已经使用以下方法解决了这个问题 观察者模式 和一个中央 控制器. 。中央控制器是唯一了解应用程序中所有小部件并确定它们组合在一起的方式的类。如果有人更改小部件 A 上的某些内容,小部件 A 就会触发一个事件。在事件处理程序中,您通过“notifyObservers()”调用来调用中央控制器,该调用通知中央控制器(以及可选的其他控制器,但为了简单起见,我不会深入讨论)某个操作(传递“MyEvent”枚举实例) ) 已经发生了。

这样,应用程序流逻辑包含在单个中心类中,并且小部件不需要相互引用。

其他提示

这是一个非常开放式的问题 - 例如,您可以创建自己的静态事件处理程序类,小部件可以订阅该类。例如:

Class newMessageHandler {
    void update(Widget caller, Widget subscriber) {
        ...
    }
}

customEventHandler.addEventType("New Message", newMessageHandler);

Widget w;
customEventHandler.subscribe(w, "New Message");

...
Widget caller;

// Fire "New Message" event for all widgets which have
// subscribed
customEventHandler.fireEvent(caller, "New Message");

其中 customEventHandler 跟踪订阅每个命名事件的所有小部件,并调用命名类的 update 方法,然后该类可以调用您想要的任何其他方法。您可能想在析构函数中调用 unsubscribe - 但您可以根据需要将其设置得更漂亮。

因此,这是我的(示例)实现,首先让我们创建一个新事件:

import java.util.EventObject;
import com.google.gwt.user.client.ui.Widget;

public class NotificationEvent extends EventObject {
    public NotificationEvent(String data) {
        super(data);
    }
}

然后我们创建一个事件处理程序接口:

import com.google.gwt.user.client.EventListener;

public interface NotificationHandler extends EventListener {
    void onNotification(NotificationEvent event);
}

如果我们现在有一个实现NotificationHanlder的小部件,我们可以通过致电以下方式触发事件:

((NotificationHandler)widget).onNotification(event);
许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top