GWT 本机拖放:拖动处理程序中没有数据



[GWT2.4, 铬, 火狐]

嘿,你好

我正在树视图中实现树项的拖放。我的树视图旁边有一个管理类,用于实例化项目并应用拖放处理程序。

下面是它的样子:

private CustomTreeItem createItem(Data data){
    CustomTreeItem item = new CustomTreeItem(data);
    if(dndApplicable())
        setupDndHandlers(item);
    return item:
}
private void setupDndHandlers(item){
    // The tree item's widget is a FocusPanel
    FocusPanel wrapper = item.getFocusPanel();
    wrapper.getElement().setDraggable(Element.DRAGGABLE_TRUE);
    // Setup the data and drag image when drag starts
    wrapper.addDragStartHandler(new DragStartHandler() {
        @Override
        public void onDragStart(DragStartEvent event) {
            event.getDataTransfer().setDragImage(wrapper.getElement(), 0, 0);
            event.setData("item_id", item.getData().getId().toString());
        }
    });
    // Each tree item can also be a drop target, so we add handlers accordingly
    wrapper.addDragLeaveHandler(new DragLeaveHandler() {
        public void onDragLeave(DragLeaveEvent event) {
            wrapper.removeStyleName("dragover");
            wrapper.removeStyleName("undroppable");
        }
    });
    // Each tree item can also be a drop target, so we add handlers accordingly
    wrapper.addDragOverHandler(new DragOverHandler() {
        public void onDragOver(DragOverEvent event) {
            if (isDroppable(event.getDataTransfer().getData("item_id"), item))
                wrapper.addStyleName("dragover");
            else
                wrapper.addStyleName("undroppable");
        }
    });
    // Each tree item can also be a drop target, so we add handlers accordingly
    wrapper.addDropHandler(new DropHandler() {
        public void onDrop(DropEvent event) {
            String id = event.getDataTransfer().getData("item_id");
            if (isDroppable(id, item)) {
                proceedWithDrop(id, item);
            }
    });

}

isDroppable函数检查几件事,首先是数据是空还是空。

在 firefox 下,我可以毫无问题地访问事件数据,但使用 Chrome,在 DragOverHandler(或 DragEnterHandler)中,通过 dataTransfer 访问的数据是空的。但是,在DropHandler中,数据是正确的。

我是否错过了一些明显的东西,以至于我没有看到它?

谢谢O.

这是出于隐私和安全原因的设计:Chrome在这里比Firefox更紧密地实现了HTML5规范。

见 http://www.w3.org/TR/html5/editing.html#drag-data-store-mode

相关内容

  • 没有找到相关文章

最新更新