【问题标题】:GWT FocusPanel clickHandler not working when created with a element使用元素创建时 GWT FocusPanel clickHandler 不起作用
【发布时间】:2014-09-07 15:00:32
【问题描述】:

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

【问题讨论】:

    标签: java dom gwt dom-events


    【解决方案1】:

    按照您描述的方式添加 DOM 处理程序没有任何问题。它适用于所有浏览器。

    【讨论】:

    【解决方案2】:

    在元素上添加 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;
            }
        }
    });
    

    【讨论】:

    • 这也确实有效。谢谢。我更喜欢 addDomHandler 方法,因为它看起来更干净。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2014-01-28
    • 2011-02-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-06-23
    • 1970-01-01
    相关资源
    最近更新 更多