0

コンポーネントを作成しました。これは、他のいくつかの複合パネル(B1B2B3 ...)の内部にある複合パネル( Aと呼びましょう)であり、内部の各複合パネル(B1B2B3 ...)はOnMouseOverとそれは大丈夫です(私は複合パネルにイベントを追加する方法を知っています) 質問: しかし、このイベントを主要な複合パネル(A)に伝播する方法。次のようなビューでパネルAを使用したいと思います。

@UiField
MyCompositePanelA panelA; //which has inside B1 B2 B3 ...

...

@UiHandler(value={"panelA"})
void onOver(MouseOverEvent e) { //or some other custom event

    if (e... =  B1) // recognize - was MouseOverEvent on B1 
}

よろしくお願いします

4

1 に答える 1

2

2つのオプションがあります。1つは、ユースケースでやり過ぎである可能性が最も高いEventBusであるか、もう1つは内部パネルにハンドラーをアタッチすることです。例えば、

(a)このメソッドを内部パネルウィジェットに追加します。

public void addMyMouseOverHandler(MouseOverHandler mouseOverHandler) {
    myInternalPanel.addDomHandler(mouseOverHandler, MouseOverEvent.getType());
}

(b)次に、次のハンドラーを作成します。

MouseOverHandler mouseOverHandler = new MouseOverHandler() {

    @Override
    public void onMouseOver(MouseOverEvent event) {
        // do something when this event fires
    }
}

作成する各内部パネルに取り付けます。

必要なアクションがウィジェットのスコープ外にある場合、Ui:Binderを使用してこのハンドラーをアタッチすることはできません。アクションを完了するために必要なものがすべて揃っているこのハンドラーを作成して(ビューなど)、ウィジェットにアタッチする必要があります。

つまり、GWTでは、イベントが目的のレベル(ビューなど)に伝播するのを待つ必要はありません。ハンドラーで目的のアクションを指定してから、このハンドラーをウィジェットにアタッチします。

于 2012-09-09T17:59:24.063 に答える