在GWT中传播来自内部面板的事件

时间:2012-09-09 14:47:58

标签: gwt mouseover gwt2

我创建了组件,它是复合面板(让我们称之为 A ),里面有几个其他复合面板( B1 B2 ,< strong> B3 ...)并且每个内部复合面板( B1 B2 B3 ...)自行启动 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 
}

最好的问候

1 个答案:

答案 0 :(得分: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中,您不会等待事件传播到所需级别(例如,您的视图):您在处理程序中指定所需的操作,然后将此处理程序附加到窗口小部件。