好的,这是我的问题。我有 2 位演示者:FirstPresenter(例如:abc.com#first)和 SecondPresenter(例如:abc.com#second)。SecondPresenter 上有一个按钮,当用户单击该按钮时,FirstPresenter 将弹出一条消息。
所以,这就是我所做的,我使用eClipse创建了一个事件名称MyEvent,eclipse生成了一个类MyEvent.java
在 SecondPresenter 上,我得到:
private EventBus eventBus;
@Inject
public SecondPresenter(final EventBus eventBus, final MyView view,
final MyProxy proxy) {
super(eventBus, view, proxy);
this.eventBus=eventBus;
}
@Override
protected void onBind() {
super.onBind();
passMsgButton.addClickHandler(new ClickHandler(){
@Override
public void onClick(ClickEvent event) {
MyEvent myEvent =new MyEvent();
myEvent.setMsg("hello");
SecondPresenter.this.eventBus.fireEvent(myEvent);
}
});
}
在 FirstPresenter 上,我得到:
private final MyHandler myHandler=new MyHandler(){
@Override
public void onMy(
MyEvent event) {
// TODO Auto-generated method stub
Window.alert(event.getMsg());
}};
@Override
protected void onBind() {
super.onBind();
registerHandler(getEventBus().addHandler(MyEvent.getType(), myHandler));
}
如果 FirstPresenter 是嵌入在 SecondPresenter 中的嵌套演示者,那么上面的代码可以正常工作。但是如果他们是 2 个独立的 Presenter,那么上面的代码就不起作用了。
为什么?我检查了谷歌文档,他们只是说 EventBus 可以调用 Presenter,他们没有说它必须是嵌套的 Presenter,所以我假设 EventBus 可以调用任何单独的 Presenter。
我改为private EventBus
,public EventBus
但它没有帮助。
我错过了什么?
编辑:
我稍微改变了我的代码,它部分工作。我不确定我做对了,因为它仍然存在一些问题。
好的,在 FirstPresenter 我实现了 MyHandler & Override onMy 方法
public class FirstPresenter extends
Presenter<FirstPresenter.MyView, FirstPresenter.MyProxy> implements MyHandler{
private final MyHandler myHandler=new MyHandler(){
@Override
public void onMy(
MyEvent event) {
// TODO Auto-generated method stub
Window.alert(event.getMsg());
}};
@ProxyEvent
@Override
public void onMy(MyEvent event) {
Window.alert(event.getMsg());
getView().getHtmlPanel().add(new Label("test"));
}
@Override
protected void onBind() {
super.onBind();
registerHandler(getEventBus().addHandler(MyEvent.getType(), myHandler));
}
}
当我单击 SecondPresenter 上的按钮(Webbrowser 的第二个选项卡上的页面)时,我看到第二个选项卡上弹出消息(即浏览器没有使第一个选项卡成为焦点),但是当我单击 FirstPresenter (第一个选项卡上的页面)我没有看到Label("test")
?
为什么它可以调用 Window.alert 但没有将 Label 添加到 FirstPresenter?
另外,如何让浏览器将焦点设置在 FirstPresenter 上(即显示第一个选项卡)?
我错过了什么吗?