我创建了组件,它是复合面板(让我们称之为 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
}
最好的问候
答案 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中,您不会等待事件传播到所需级别(例如,您的视图):您在处理程序中指定所需的操作,然后将此处理程序附加到窗口小部件。