【问题标题】:GWTP get access from child presenter/view to parent presenter/viewGWTP 获得从子演示者/视图到父演示者/视图的访问权限
【发布时间】:2020-05-14 23:45:17
【问题描述】:

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

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

【问题讨论】:

    标签: gwt gwt-platform


    【解决方案1】:

    两者都可以。

    对于事件 - 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 演示者;

    改为这样:

    @Inject 
    Provider<ParentPresenter> presenterProvider;
    

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

    【讨论】:

    • 如何确保Parent Presenter是单身?我以这种方式绑定它:bindPresenter(AppPresenter.class, AppPresenter.MyView.class, AppView.class, AppPresenter.MyProxy.class); 我可以绑定为仅单例的小部件。我也有配置:bind(AppView.Binder.class).in(Singleton.class);- 但这只是一个视图。你能帮忙吗?
    • Presenter 默认为 Singleton。
    猜你喜欢
    • 2015-07-23
    • 1970-01-01
    • 1970-01-01
    • 2011-06-15
    • 1970-01-01
    • 1970-01-01
    • 2012-07-06
    • 2010-10-05
    相关资源
    最近更新 更多