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

时间:2016-06-09 12:57:04

标签: gwt gwtp gwt-platform

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

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

请帮忙。

1 个答案:

答案 0 :(得分:2)

两者都有可能。

对于事件 - 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中的循环依赖性错误,请不要像

    那样连接它

    @Inject ParentPresenter演示者;

  3. 而是这样做:

    @Inject 
    Provider<ParentPresenter> presenterProvider;
    

    并使用您孩子的presenterProvider.get()访问