我有两位演示者/观点。让我们称他们为parent
和child
。 parent
演示者是child
演示者的容器(使用插槽机制)。
在child
演示者的视图中,用户单击了按钮,我想在parent
演示者中处理此操作。
我该怎么做?什么是最好的方法?我应该使用某种事件和事件处理程序吗?或者我应该向另一个注入一个演示者吗?
请帮忙。
答案 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())
注射: 只需确保:
为了避免GIN中的循环依赖性错误,请不要像
那样连接它@Inject ParentPresenter演示者;
而是这样做:
@Inject
Provider<ParentPresenter> presenterProvider;
并使用您孩子的presenterProvider.get()
访问