我使用普通的遗留GWT DnD而不是gwt-dnd库(因为我不需要DnD小部件,而是普通数据,所以我想保持简单)。
我可以使用Image小部件来实现它
然后我切换到HTML小部件,但随后拖不起作用:没有错误没有任何东西,只是拖动不再拖动。
代码(问题出在拖动部分,我只列在代码的这一部分下面):
HTML theWidget = new HTML("some string"); // NOK : doesn't drag
// Image theWidget = new Image ("path/image.png"); // OK : does drag
theWidget.addDragStartHandler(new DragStartHandler() {
public void onDragStart(DragStartEvent event) {
event.setData(data, "some data" );
}
});
怎么了?
看起来没有DragStartEvent,因为在我单击拖动并将鼠标移动到放置目标之后,浏览器会选择介于两者之间的内容(拖动开始到放置目标)。
为了调查,我添加了一个MouseDownHandler,实际上是一个MouseDownEvent。
所以问题是:如何控制GWT将在DragStartEvent和MouseDownEvent之间触发哪个事件?
答案 0 :(得分:0)
假设您的最终目标是使用原生HTML
拖放支持(映射GWT
)拖放HTML5 API
窗口小部件,那么您遗漏了一些内容事情有效。你必须:
制作元素draggable
(在代码中看不到它):
theWidget.getElement().setDraggable(Element.DRAGGABLE_TRUE)
在元素中添加DragStartHandler
并设置要传输的数据(正如您所做的那样):
theWidget.addDragStartHandler(new DragStartHandler() {
public void onDragStart(DragStartEvent event) {
event.setData(data, "some data" );
}
});
将DragOverHandler
添加到元素目标,这将是要删除的元素:
targetWidget.addDragOverHandler(new DragOverHandler() {
public void onDragOver(DragOverEvent event) {
// Some kind of effect, if you like.
}
});
将DropHandler
添加到同一元素目标,阻止默认浏览器操作,并检索数据:
targetWidget.addDropHandler(new DropHandler() {
public void onDrop(DropEvent event) {
event.PreventDefault();
String data = event.getData("data");
}
});