0

我创建了组件,它是复合面板(我们称之为A),它在其他几个复合面板(B1B2B3 ...)内部,并且每个内部复合面板(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

您有两个选择:EventBus,这在您的用例中很可能是一种过度杀伤,或者将处理程序附加到您的内部面板。例如,

(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 回答