GWTP可以从子演示者/视图访问父演示者/视图

问题描述 投票:2回答:1

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

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

gwt gwt-platform
1个回答
3
投票

两者都可以。

对于事件-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));
    }
}

因此,在您的儿童节目主持人中,您只需做:

MyEvent.fire(this, thatObjectYoudLikeToPass);

并在父级中进行注册,您可以使用:

addRegisteredHandler(MyEvent.TYPE, handler);

addVisibleHandler(MyEvent.TYPE, handler);

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

用于注射:只需确保:

  1. 您的父演示者是单身人士
  2. 为了避免GIN中的循环依赖错误,请不要像它那样接线>>

    @@注入ParentPresenter演示者;

  3. 而是这样做:

@Inject 
Provider<ParentPresenter> presenterProvider;

并在您的孩子中使用presenterProvider.get()进行访问

© www.soinside.com 2019 - 2024. All rights reserved.