我有2个演示者/视图。我们称它们为parent
和child
。 parent
演示者是child
演示者的容器(使用插槽机制)。在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));
}
}
因此,在您的儿童节目主持人中,您只需做:
MyEvent.fire(this, thatObjectYoudLikeToPass);
并在父级中进行注册,您可以使用:
addRegisteredHandler(MyEvent.TYPE, handler);
或
addVisibleHandler(MyEvent.TYPE, handler);
如果您希望仅在父级可见时对其进行处理。我建议您在演示者的onBind方法中添加这些处理程序(重写时不要忘记先调用super.onBind())
用于注射:只需确保:
为了避免GIN中的循环依赖错误,请不要像它那样接线>>
@@注入ParentPresenter演示者;
而是这样做:
@Inject Provider<ParentPresenter> presenterProvider;
并在您的孩子中使用
presenterProvider.get()
进行访问