1

gwt イベント バスを介してオブジェクトを送信しようとしていますが、なぜ機能しないのかわかりません。

通常、ポップアップを作成するコンポーネント A があります。A がポップアップに登録され、ポップアップがイベントを発生させます。現在、リスナー (OtherComponent) はポップアップに関連していません。ポップアップがイベントを発生させると、他のコンポーネントはそれをキャッチしません。

これが私のコードです:

ハンドラ:

public interface MyEventHandler extends EventHandler {
   public void onChanged(MyEvent event);
}

イベント :

public class MyEvent extends GwtEvent<MyEventHandler> {
  private static final GwtEvent.Type<MyEventHandler> TYPE = new GwtEvent.Type<MyHandler>();

  private MyBean my;

  public MaterielEvent(My bean) {
    my = bean;
  }

  @Override
  public com.google.gwt.event.shared.GwtEvent.Type<MyEventHandler> getAssociatedType() {
    return TYPE;
  }

  public static Type<MyEventHandler> getType() {
    return TYPE;
  }

  @Override
  protected void dispatch(MyEventHandler handler) {
    handler.onChanged(this);
  }

  public MyBean getBean() {
    return my;
  }
}

成分 :

public class OtherPanel extends Composite implements HasMyEventHandlers {
  interface OtherPanelUiBinder extends UiBinder<Widget, OtherPanel> {}
  private static OtherPanelUiBinder uiBinder = GWT.create(OtherPanelUiBinder.class);

  public OtherPanel() {
    this.addMyEventHandler(new MyEventHandler() {
       @Override
       public void onChanged(MyEvent event) {
         NotificationManager.success("event recieved");
       }
    });

    initWidget(uiBinder.createAndBindUi(this));
  }

  @Override
  public HandlerRegistration addMyEventHandler(MyEventHandler handler) {
    return addHandler(handler, MyEvent.getType());
  }
}

呼び出し (別のコンポーネント内) :

  fireEvent(new MyEvent(myBean));

通知「受信したイベント」は呼び出されません。

私は確かに何かを逃した。ご協力いただきありがとうございます

4

2 に答える 2

5

EventBus の新しいインスタンスを作成し、その新しいインスタンスで eventHandler を定義しています。

メソッドをどのように呼び出しているfireEventか (または、どの eventBus のインスタンスから呼び出しているか) はわかりませんが、渡されるコードで単一のeventBus インスタンスを定義する必要があります。

したがって、eventBus をインスタンス化し、必要なハンドラーを定義してから、eventBus と対話するすべてのコンポーネントに "MyEventHandler" をパラメーターとしてコンストラクターに受け入れさせます。次に、イベント バスの事前定義されたインスタンスをそのコンポーネントに渡すことができます。これにより、そのコンポーネントは後で、アプリケーションが持つ単一の eventBus とやり取りできるようになります。

于 2012-04-11T15:46:45.913 に答える
2

@Jeff Allenが書いたように。各ウィジェットには、専用の EventBus インスタンスがあります (静的ではありません)。イベントがインスタンス固有でない場合は、ウィジェット ラッパー メソッドを介さずに EventBus を直接使用できます。Event クラスと Handler クラスは、これに対して完全に準備ができています。

http://google-web-toolkit.googlecode.com/svn/javadoc/2.4/com/google/gwt/event/shared/EventBus.htmlの javadoc を参照してください(ウィジェットのイベント メソッドは evtnbus メソッドの単なるラッパーであることに気づきました。

于 2012-04-11T18:26:59.163 に答える