GWTP 获得从子 presenter/view 到父 presenter/view 的访问权限
GWTP get access from child presenter/view to parent presenter/view
我有 2 个 presenters/view。让我们称它们为 parent
和 child
。 parent
presenter 是 child
presenter 的容器(使用插槽机制)。
在 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));
}
}
因此,在您的 child 演示者中,您只需执行以下操作:
MyEvent.fire(this, thatObjectYoudLikeToPass);
并在 parent 中注册它,您可以使用:
addRegisteredHandler(MyEvent.TYPE, handler);
或
addVisibleHandler(MyEvent.TYPE, handler);
如果您希望仅在 parent 可见时才对其进行处理。我建议你在演示者的 onBind 方法中添加这些处理程序(覆盖时不要忘记先调用 super.onBind())
注射用:
只需确保:
- 您的parent主持人是单身人士
为了避免 GIN 中的循环依赖错误,请不要像这样连接它
@Inject ParentPresenter 演示者;
而是这样做:
@Inject
Provider<ParentPresenter> presenterProvider;
并在 child
中使用 presenterProvider.get()
访问它
我有 2 个 presenters/view。让我们称它们为 parent
和 child
。 parent
presenter 是 child
presenter 的容器(使用插槽机制)。
在 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));
}
}
因此,在您的 child 演示者中,您只需执行以下操作:
MyEvent.fire(this, thatObjectYoudLikeToPass);
并在 parent 中注册它,您可以使用:
addRegisteredHandler(MyEvent.TYPE, handler);
或
addVisibleHandler(MyEvent.TYPE, handler);
如果您希望仅在 parent 可见时才对其进行处理。我建议你在演示者的 onBind 方法中添加这些处理程序(覆盖时不要忘记先调用 super.onBind())
注射用: 只需确保:
- 您的parent主持人是单身人士
为了避免 GIN 中的循环依赖错误,请不要像这样连接它
@Inject ParentPresenter 演示者;
而是这样做:
@Inject
Provider<ParentPresenter> presenterProvider;
并在 child
中使用presenterProvider.get()
访问它