2012-02-07 21 views
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インスタンスのイベントをどのように起動するのですか?

答えて

2

は、source引数がnullでない場合にのみ、イベントのソースを変更します。

HandlerManagerは最初overrideSourceと、イベントのソースを設定し、それを上書きしませんので、暗黙のnull源とdoFireを呼び出します。

QED。

+0

しかし、ソースがまだnullの場合、このように人口ハンドラのリスト、: 一覧ハンドラ= getDispatchList(event.getAssociatedType()、ソース); event.sourceのハンドラを取得しませんか? –

+0

いいえ、 'HandlerManager'のハンドラは常に' source'なしで登録されます。明確にするために: 'HandlerManager'は' EventBus'の_with source_機能を使用しません。代わりに 'fireEvent'で' overrideSource'を使ってイベントのソースを補完します。 –

+0

HandlerManagerは、作成したウィジェット内で使用するように設計されていますが、イベントソース値を強制的に使用するメリットはありません。 –

関連する問題