2017-04-11 115 views
1

我有一个项目使用dijit/Treedijit/tree/dndSource,用户可以通过拖放来移动树项目进行更改。我在这里使用的道场发布1.10.4See的jsfiddle拖放完成时拖放N拖放事件

Dojo Tree w/drag and drop

我需要有一个通知时下降完成。这似乎是onDndDrop将是明显的地方捕获该事件,但该文件说,这不是一个好主意,混乱与此事件:

dojo/dnd documentation

从上面的文档...

主题处理器

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

Summary of topics

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

末--------- ----------- DOC

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

如果我必须使用onDndDrop事件,我该如何去创建它,所以我没有收到任何错误,它的功能正常吗?

回答

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); 
} 

做出这些改变我的项目后,一切正常确定没有错误,我现在能够在掉落事件过程中做出的AJAX调用回服务器。请注意,此事件在放置开始时触发,而不是在完成时触发。

UPDATE

使用这种方法的下降期间火treeDropEvt2似乎是在下降的,而不是下降完成后的开始。不知道为什么获得完成滴的通知是如此痛苦?非常沮丧..

1

我在TreeStoreModelpasteItem函数中做了你想做的事情。 TreeStoreModel是Dojo树的存储。

var memoryStore = new Memory({ 
      data: [{ 
       id: "root", 
       name: "ROOT", 
       loaded: true 
      }, ], 
      getChildren: function(object) { 
       return this.query({ 
        parent: object.id 
       }); 
      }, 
      clearOnClose:true 
     }); 

var myStore = new Observable(memoryStore); 

var myModel = new TreeStoreModel({ 
       store: myStore, 
       query: { 
        id: "root" 
       }, 
       labelAttr: "label", 
       pasteItem: function(child, oldParent, newParent, copy, insertIndex) { 
        // SEND NOTIFICATION, DO QUERIES 
       } 
      }); 

var tree = new Tree({ 
      model: myModel, 
      dndController: dndSource 
}); 
+0

谢谢Stefano,会检查这一点..不'TreeStoreModel'弃用?将检查是否有ObjectStoreModel的pasteItem? – GoinOff

+0

我真的不知道它是否被弃用。 'ObjectStoreModel'也有pasteItem,试试。 [Doc](https://dojotoolkit.org/reference-guide/1.10/dijit/tree/ObjectStoreModel.html) – Stefano