我建议你看看
gwt-mvp
和/或
gwt-presenter
库,它们都采用相同的方法来解决这个问题。实际上,您为所有演示者创建了一个基类,它维护演示者拥有的所有事件注册的内部列表。当你来切换演示者时,你会打电话给
presenter.unbind()
在旧的演示者上,它将删除您创建的所有事件处理程序。
基本演示者类将如下所示:
public abstract class BasePresenter {
private List<HandlerRegistration> registrations = Lists.newLinkedList();
public void bind() {}
public void unbind() {
for(HandlerRegistration registration : registrations) {
registration.removeHandler();
}
registrations.clear();
}
protected void addHandler(HandlerRegistration registration) {
registrations.add(registration);
}
}
然后在演示者的绑定方法中,通过
HandlerRegistration
对象已进入
addHandler()
方法:
bind() {
addHandler(foo.addBarHandler(...));
}