Stefan Falk
Stefan Falk

Reputation: 25397

Why am I not getting any events for my anchor element?

For a quite simple element

public static class ToolHtml extends Anchor {

    private Long toolId;

    public ToolHtml(ToolDetails toolDetails) {

        this.toolId = toolDetails.getToolId();
        this.setText(toolDetails.getName());

        Style style = this.getElement().getStyle();
        style.setColor("orange");

        this.getElement().setId(DOM.createUniqueId());
    }

    public Long getToolId() {
        return this.toolId;
    }

}

I am trying to add some event handlers. I am interested in the DragStartEvent but not even the ClickEvent seems to work and I simply can't figure out why:

public void addOfferItem(ToolHtml toolHtml) {

    Set<ToolHtml> toolHtmlSet = this.toolIdToToolHtml.get(toolHtml.getToolId());

    if (toolHtmlSet == null) {
        toolHtmlSet = new HashSet<>();
        this.toolIdToToolHtml.put(toolHtml.getToolId(), toolHtmlSet);
    }

    toolHtml.getElement().setAttribute("contenteditable", "false");
    toolHtml.getElement().setAttribute("draggable", "true");

    toolHtml.addBitlessDomHandler(new ClickHandler() {

        @Override
        public void onClick(ClickEvent event) {
            LOGGER.fine("Click");
            LOGGER.fine("Click");
            LOGGER.fine("Click");

        }
    }, ClickEvent.getType());

    toolHtml.addDomHandler((DragStartEvent event) -> {
                LOGGER.fine("HANDLER DRAG START");
            },
            DragStartEvent.getType());

    toolHtml.addDomHandler((DragStartEvent event) -> {
                LOGGER.fine("DOM DRAG START");
            },
            DragStartEvent.getType());

    toolHtml.addBitlessDomHandler((DragStartEvent event) -> {
                LOGGER.fine("DRAG START");
            },
            DragStartEvent.getType());

    toolHtmlSet.add(toolHtml);

    // Attach/append to DOM
    this.getElement().appendChild(toolHtml.getElement());
}

Does anybody know what the issue is here?

Upvotes: 0

Views: 58

Answers (1)

Andrei Volgin
Andrei Volgin

Reputation: 41089

You append an element, not a Widget to which your handlers have been attached. You need to add a widget to a widget for all the functionality to work.

NB: Instead of toolHtml.addBitlessDomHandler you need to use

toolHtml.addClickHandler

Upvotes: 1

Related Questions