删除完成时拖动N Drop事件

时间:2017-04-11 16:59:50

标签: javascript drag-and-drop dojo

我有一个使用dijit/Treedijit/tree/dndSource的项目,用户可以使用拖放来移动树项以进行更改。我正在使用dojo版本1.10.4在这里查看jsfiddle

Dojo Tree w/drag and drop

我需要在删除完成时收到通知。似乎onDndDrop将是捕获此事件的明显位置,但文档说这个事件并不是一个好主意:

dojo/dnd documentation

从上面的文档......

主题处理器

定义了以下主题侦听器:onDndSourceOver,onDndStart, onDndDrop ,onDndCancel。这些主题由经理发布。如果要覆盖主题监听器,请阅读主题摘要。

Summary of topics

警告:在大多数情况下,您希望使用事件。主题是低级构造,在内部使用,通常不应用于自定义。

---------结束文件-----------

那么,如何获取drop完成的通知,以便我可以使用ajax更新服务器端的一些项目?使用onDndDrop对象可用的dijit/tree/dndSource事件是我需要的,但是文档说不应该弄乱它。在我上面的jsfiddle示例中,我在//onDndDrop: treeDropEvt,对象创建上注释了tree。如果将其添加到树创建中,当用户将树项移动到树中的另一个位置时会调用treeDropEvt,但可以在控制台中看到错误,并且不会发生移动。

如果我必须使用onDndDrop事件,我该如何创建它以便我没有收到任何错误并且它正常运行???

2 个答案:

答案 0 :(得分:1)

我在pasteItem的{​​{1}}函数中执行您要执行的操作。 TreeStoreModel是Dojo树的存储。

TreeStoreModel

答案 1 :(得分:0)

在发布上述问题后,我找到了使用topic的解决方案。在这里查看我的更新jsfiddle:

Monitor onDrop event using topic

"dojo/topic"添加到require行。

topic.subscribe("/dnd/drop",treeDropEvt2);

function treeDropEvt2(source, nodes, copy, target) {
  console.log('treeDropEvt2');
  console.dir(source);
  console.dir(nodes);
  console.dir(copy);
  console.dir(target);
}

对我的项目进行这些更改后,一切正常,没有错误,我现在可以在drop事件期间将ajax调用回服务器。请注意,此事件在丢弃开始时触发,而不是在完成时触发。

<强>更新

在丢弃期间使用此方法触发treeDropEvt2似乎是在删除开始时而不是在删除完成之后。不知道为什么得到完成掉落的通知是如此痛苦?非常令人沮丧..