2
私は分析しましたHandlerManagerと私はイベントソースをどのように処理するか参照してください。ライン117:HandlerManagerはソースとどのように連携しますか?
public void fireEvent(GwtEvent<?> event) {
...
Object oldSource = event.getSource();
event.overrideSource(source);
try {
// May throw an UmbrellaException.
eventBus.fireEvent(event); // <--- LOOK HERE
} catch (com.google.web.bindery.event.shared.UmbrellaException e) {
throw new UmbrellaException(e.getCauses());
} finally {
....
}
}
しかしsimple event bus実装は以下のいるコード、行86:それは常にdoFireを呼び出すため
@Override
public void fireEvent(Event<?> event) {
doFire(event, null); // <---- SOURCE IS NULL???
}
@Override
public void fireEventFromSource(Event<?> event, Object source) {
if (source == null) {
throw new NullPointerException("Cannot fire from a null source");
}
doFire(event, source);
}
ので、HandlerManager は、ソースとない火災のイベントを行います(イベントは、null) ;
HandlerManagerがどのようにソースに対してイベントを発生させるのかを明確にすることはできますか? HandlerManagerがWidgetで使用されているように、Widgetインスタンスのイベントをどのように起動するのですか?
しかし、ソースがまだnullの場合、このように人口ハンドラのリスト、: 一覧ハンドラ= getDispatchList(event.getAssociatedType()、ソース); event.sourceのハンドラを取得しませんか? –
いいえ、 'HandlerManager'のハンドラは常に' source'なしで登録されます。明確にするために: 'HandlerManager'は' EventBus'の_with source_機能を使用しません。代わりに 'fireEvent'で' overrideSource'を使ってイベントのソースを補完します。 –
HandlerManagerは、作成したウィジェット内で使用するように設計されていますが、イベントソース値を強制的に使用するメリットはありません。 –