为什么AttachEvent没有被触发?

时间:2016-03-13 19:32:58

标签: gwt

我的SimplePanel(或divcontenteditable属性设置为true。在这个面板中,我有另一个可拖动的 div,它本身不可编辑但存在于可编辑内。

有像

这样的内容
Text text <div draggable="true">DRAG</div> text text.
到目前为止,

对我有用。拖动等工作到目前为止预期。但是,如果插入符号位于可拖动的div旁边且用户点击 Backspace 删除,则可拖动的div也会被删除 - 只是为了明确这实际上是我想要的 - 但问题是我需要知道何时删除此元素以删除其关联的DragStartHandler

问题是在这种情况下AttachEvent似乎没有被解雇 - 或者我做错了。我的DragAndDropController实现AttachEvent.Handler以符合处理程序的资格。我为每个可拖动的Widget添加它,但我从未看到任何日志记录输出。

这是我目前的解决方案:

public class DragAndDropController implements AttachEvent.Handler {

    private SimplePanel textarea;

    private Element currentlyDragged;

    public DragAndDropController(SimplePanel textarea) {        
        this.textarea = textarea;       
        // ...
    }

    public void addDraggable(Widget draggable) {

        DragStartHandler dragStartHandler = new DragStartHandler() {
            @Override
            public void onDragStart(DragStartEvent event) {
                GWT.log("Drag start for .." + draggable.getElement().getId());              
                currentlyDragged = draggable.getElement();              
                event.setData("text", draggable.getElement().getId());
                event.getDataTransfer().setData("text", draggable.getElement().getId());
            }           
        };

        // The handler I plan to remove ..
        final HandlerRegistration addBitlessDomHandler = this.textarea.addBitlessDomHandler(dragStartHandler, DragStartEvent.getType());

        draggable.addAttachHandler(this);
    }

    @Override
    public void onAttachOrDetach(AttachEvent event) {
        GWT.log("DETACH");
    }

    // ..
}

我希望有人能澄清一下。 devtool告诉我受影响的div从DOM树中删除(至少它的HTML内容消失了所以我想我可以做出这个假设)。

1 个答案:

答案 0 :(得分:1)

您的所有代码都没有显示Widget draggable被添加到父窗口小部件,因此不清楚附加/分离连接是否可以按预期工作。如果你只是简单地调用element.appendChild(widget.getElement()),这将正确地将dom元素附加到页面,但将通知窗口小部件(或它包含的任何内容或已订阅它)它已正确连接。

简而言之,仅仅是可见(或不可见)并不足以知道小部件已正确连接/分离。确保窗口小部件已附加到另一个窗口小部件(依此类推,直到RootPanel)。