GWT FocusPanel clickHandler在使用元素创建时不起作用

时间:2014-07-16 22:11:07

标签: java dom gwt dom-events

你好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小部件提供的隐藏输入,我会松散什么兼容性?

2 个答案:

答案 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处理程序没有任何问题。它适用于所有浏览器。