0

わかりました、ここに私の問題があります。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 にフォーカスを設定させるにはどうすればよいですか (つまり、最初のタブを表示します)?

何か不足していますか?

4

1 に答える 1

2

問題は、最上位のプレゼンターが 2 人いる場合、常に 1 つしかアクティブにならないことです。onBind()のメソッドFirstPresenterが呼び出されていないため、ハンドラが の にアタッチされていないEventと思いEventBusます。

Presenters両方が同時に「アクティブ」であるため、ネストされたプレゼンターで機能します。

ProxyEventに頼る必要があります。FirstPresenter

于 2013-07-11T12:38:35.207 に答える