我的SimplePanel
(或div
)contenteditable
属性设置为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内容消失了所以我想我可以做出这个假设)。
答案 0 :(得分:1)
您的所有代码都没有显示Widget draggable
被添加到父窗口小部件,因此不清楚附加/分离连接是否可以按预期工作。如果你只是简单地调用element.appendChild(widget.getElement())
,这将正确地将dom元素附加到页面,但不将通知窗口小部件(或它包含的任何内容或已订阅它)它已正确连接。
简而言之,仅仅是可见(或不可见)并不足以知道小部件已正确连接/分离。确保窗口小部件已附加到另一个窗口小部件(依此类推,直到RootPanel
)。