わかりました、ここに私の問題があります。FirstPresenter (例: abc.com#first) と SecondPresenter (例: abc.com#second) の 2 人のプレゼンターがいます。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 つの別々のプレゼンターである場合、上記のコードは機能しませんでした。
なんで?Google doc を確認しましたが、EventBus はプレゼンターを呼び出すことができるとだけ言っていますが、ネストされたプレゼンターでなければならないとは言っていないので、EventBus は任意の分離されたプレゼンターを呼び出すことができると想定しました。
に変更private EventBus
しましたpublic EventBus
が、役に立ちませんでした。
私は何が欠けていますか?
編集:
コードを少し変更しましたが、部分的に機能します。まだいくつかの問題があるため、正しいことをしているとは言えません。
OK、FirstPresenter で MyHandler を実装し、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 (Web ブラウザーの 2 番目のタブのページ) のボタンをクリックすると、2 番目のタブにメッセージ ポップアップが表示されました (つまり、ブラウザーは最初のタブをフォーカスしませんでした)。最初のタブのページ) Label("test")
?が表示されませんでした
Window.alert を呼び出すことができるのに、Label を FirstPresenter に追加しなかったのはなぜですか?
また、ブラウザに FirstPresenter にフォーカスを設定させるにはどうすればよいですか (つまり、最初のタブを表示します)?
何か不足していますか?