0

我使用普通的传统 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。

所以问题是:如何控制在 DragStartEvent 和 MouseDownEvent 之间触发哪个事件 GWT ?

4

1 回答 1

0

假设您的最终目标是HTML使用本机GWT拖放支持(映射HTML5 API)拖放小部件,那么您缺少一些让事情正常工作的部分。你必须:

  • 制作元素draggable(在您的代码中看不到它):

    theWidget.getElement().setDraggable(Element.DRAGGABLE_TRUE)
    
  • 将 a 添加DragStartHandler到元素并设置要传输的数据(就像您所做的那样):

    theWidget.addDragStartHandler(new DragStartHandler() {
      public void onDragStart(DragStartEvent event) {
        event.setData(data, "some data" );
      }
    });
    
  • 将 a 添加DragOverHandler到元素目标,这将是要放置的元素:

    targetWidget.addDragOverHandler(new DragOverHandler() {
      public void onDragOver(DragOverEvent event) {
        // Some kind of effect, if you like.
      }
    });
    
  • 将 a 添加DropHandler到同一元素目标,阻止默认浏览器操作,并检索数据:

    targetWidget.addDropHandler(new DropHandler() {
      public void onDrop(DropEvent event) {
        event.PreventDefault();
        String data = event.getData("data");  
      }
    });
    
于 2013-04-01T20:12:15.670 回答