你好GWT伙伴。
在我使用GWT时,我遇到的问题是FocusPanel没有处理添加到它的clickEvent。我没有采用标准方式进行GWT,即使用UI绑定器或纯Java代码小部件构建GUI。我的主机GWT HTML文件是1个大文件,其中包含代表'页面的div标签。内容。我使用GWT来控制DOM。
我将此HTML作为FocusPanel的内容导入。
<div id="editCardsResponses">
<div id="editCardsSuccess" class="success-box clickable">
<span id="editCardsSuccessLabel">Your card was successfully deleted/edit/added.</span>
<span class="glyphicon glyphicon-remove"></span>
</div>
...
</div>
这是代码......
RootPanel editCardsSuccess = RootPanel.get("editCardsSuccess");
FocusPanel editCardsSuccessPanel = new FocusPanel(editCardsSuccess);
editCardsSuccessPanel.addClickHandler(new ClickHandler() {
public void onClick(ClickEvent event) {
hideWidget(editCardsSuccessPanel);
}
});
直到我这样做才开始工作......
final HTMLPanel editCardsSuccess = view.getEditCardsSuccess();
editCardsSuccess.addDomHandler(new ClickHandler() {
public void onClick(ClickEvent event) {
hideWidget(editCardsSuccess);
}
}, ClickEvent.getType());
我甚至尝试将FocusPanel添加到父DIV,认为FocusPanel没有附加到DOM,但这也没有用。
RootPanel.get("editCardsResponses").add(editCardsSuccessPanel);
我想使用FocusPanel,因为GWT想要添加一个隐藏的输入DOM,以及它包装的元素。我假设隐藏的输入处理一些跨浏览器问题,如果我只使用domHandler方法,我可能会丢失。
任何人都可以帮助解释为什么FocusPanel.ClickHandler不会生效,但附加的domHandler会吗?
如果DOM附件出现问题,有没有办法重新附加分离的元素/小部件?
如果我使用domHandler方式...由于没有获得GWT FocusPanel小部件提供的隐藏输入,我会松散什么兼容性?
答案 0 :(得分:2)
在Element上添加DOM ONCLICK
处理程序事件。
示例代码:
final Element desc = RootPanel.get("editCardsSuccess").getElement();
DOM.sinkEvents((com.google.gwt.user.client.Element) desc, Event.ONCLICK);
DOM.setEventListener((com.google.gwt.user.client.Element) desc, new EventListener() {
@Override
public void onBrowserEvent(Event e) {
switch (DOM.eventGetType(e)) {
case Event.ONCLICK:
System.out.println("click");
break;
}
}
});
答案 1 :(得分:1)
按照您描述的方式添加DOM处理程序没有任何问题。它适用于所有浏览器。