我有 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 中的循环依赖错误,请不要像
@Inject 家长演示者演示者;
而是这样做:
@Inject
Provider<ParentPresenter> presenterProvider;
并在您的孩子身上presenterProvider.get()
访问它