GWTP 获得从子 presenter/view 到父 presenter/view 的访问权限

GWTP get access from child presenter/view to parent presenter/view

我有 2 个 presenters/view。让我们称它们为 parentchildparent presenter 是 child presenter 的容器(使用插槽机制)。 在 child 演示者的视图中,用户单击了按钮,我想在 parent 演示者中处理此操作。

我该怎么做?什么是最好的方法?我应该使用某种事件和事件处理程序吗?或者我应该将一个演示者注入另一个?

两者皆有可能。

对于事件 - GWTP 有 GWT 事件的简化版本:

public interface MyEventHandler extends EventHandler {
    void onMyEvent(MyEvent event);
}

public class MyEvent extends GwtEvent<MyEventHandler> {
    public static Type<MyEventHandler> TYPE = new Type<MyEventHandler>();
    private Object myData;
    public Type<MyEventHandler> getAssociatedType() {
        return TYPE;
    }
    protected void dispatch(MyEventHandler handler) {
        handler.onMyEvent(this);
    }

    public MyEvent(Object myData) {
        this.myData = myData;
    }
    /*The cool thing*/
    public static void fire(HasHandlers source, Object myData){
        source.fireEvent(new MyEvent(myData));
    }
}

因此,在您的 child 演示者中,您只需执行以下操作:

MyEvent.fire(this, thatObjectYoudLikeToPass);

并在 parent 中注册它,您可以使用:

addRegisteredHandler(MyEvent.TYPE, handler);

addVisibleHandler(MyEvent.TYPE, handler);

如果您希望仅在 parent 可见时才对其进行处理。我建议你在演示者的 onBind 方法中添加这些处理程序(覆盖时不要忘记先调用 super.onBind())

注射用: 只需确保:

  1. 您的parent主持人是单身人士
  2. 为了避免 GIN 中的循环依赖错误,请不要像这样连接它

    @Inject ParentPresenter 演示者;

而是这样做:

@Inject 
Provider<ParentPresenter> presenterProvider;

并在 child

中使用 presenterProvider.get() 访问它