0

GWTP のイベントに問題があります。

TabContainerPresenter を拡張する MainPresenter があります。このプレゼンターは、いくつかの UI コンポーネント + いくつかの com.gwtplatform.mvp.client.Tab : HomeTab、ContactTab などを含む MainView にリンクされています。

MainPresenter はいくつかのイベントに反応することになっています "MyEvent" MyEvent には対応する MyHandler があり、これらの優れたプラクティスに従って作成されていますhttp://arcbees.wordpress.com/2010/08/24/gwt-platform-event-best-practice/

このように MainView の ui コンポーネントからイベントを発生させると:

MyEvent.fire(this, new MyEventContext(..));

MainPresenter でイベントを正しくキャッチします。

しかし、「タブプレゼンター」の1つでまったく同じことをすると、イベントはMainPresenterによってキャッチされません。

たとえば、MainPresenter の「HomeTab」である HomePresenter で、

MyEvent.fire(this, new MyEventContext(..));

HomePresenter からはイベントをキャッチできますが、MainPresenter からはキャッチできません。

何か案が?

4

2 に答える 2

1

これらの規則を尊重してください。

  1. ビューに挿入する EventBus はcom.google.web.bindery.event.shared.EventBus(ではないcom.google.gwt.event.shared.EventBus)
  2. イベントを処理するプレゼンター (HomePresenter または MainPresenter) で、ライフサイクル メソッドaddRegisteredHandler内の メソッドを使用してイベントに登録します。onBind

    @Override
    protected void onBind() {
        super.onBind();
    
        addRegisteredHandler(MyEvent.getType(), this);
    }
    

あなたが犯した特定の間違いが何であるかはわかりません。あなたを助けるために、イベントをタブ付きプレゼンターから TabContainerPresenter に送信できることを示す簡単な概念実証を作成しました。このプロジェクトのクローンを作成し、#!settingsPage に移動します。ApplicationPresenter によってキャッチされるイベントを発生させる 2 つの「Fire true」および「Fire false」ボタンが表示されます。

于 2013-03-08T16:17:00.127 に答える
0

まず、この素晴らしい POC に感謝します。これは、何がうまくいかなかったかを理解するための優れた基盤です。私は実際には GWTP を適切に使用していないことがわかりました。

根本的な問題は、2 つの異なる eventBus があったことでした。

Log.info("eventBus: "+eventBus)

MainPresenter と HomePresenter で。ログは、同じハッシュコードを持っていないことを示しました。

これは、次のようにして EventBus に直接アクセスすることがあったためです。

EventBus.Util.getInstance();

一方、placeManager は次のようにインスタンス化されます。

DelayedBindRegistry.bind(GWT.create(MyInjector.class))
于 2013-03-12T11:23:47.710 に答える