拖放完成时拖放N拖放事件
我有一个项目使用dijit/Tree
和dijit/tree/dndSource
,用户可以通过拖放来移动树项目进行更改。我在这里使用的道场发布1.10.4See的jsfiddle拖放完成时拖放N拖放事件
我需要有一个通知时下降完成。这似乎是onDndDrop
将是明显的地方捕获该事件,但该文件说,这不是一个好主意,混乱与此事件:
从上面的文档...
主题处理器
定义了以下话题监听器:onDndSourceOver,onDndStart,onDndDrop,onDndCancel。这些主题由经理发布。如果您想要覆盖主题监听器,请阅读主题摘要。
警告:在大多数情况下,你要使用的事件。主题是内部使用的低级构造,通常不应用于自定义。
末--------- ----------- DOC
那么,如何才能得到当降完成,所以我可以更新对一些项目的通知服务器端使用ajax? onDndDrop
事件可用dijit/tree/dndSource
对象是我需要的,但文档说不应该搞砸它。在我上面的jsfiddle示例中,我已经在tree
对象创建中注释掉//onDndDrop: treeDropEvt,
。如果将此添加到树的创建中,当用户将树项移动到树中的另一个位置时会调用treeDropEvt
,但在控制台中可以看到错误,并且移动不会发生。
如果我必须使用onDndDrop
事件,我该如何去创建它,所以我没有收到任何错误,它的功能正常吗?
在发布上述问题后,我找到了一个使用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
似乎是在下降的,而不是下降完成后的开始。不知道为什么获得完成滴的通知是如此痛苦?非常沮丧..
我在TreeStoreModel
的pasteItem
函数中做了你想做的事情。 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
});
谢谢Stefano,会检查这一点..不'TreeStoreModel'弃用?将检查是否有ObjectStoreModel的pasteItem? – GoinOff
我真的不知道它是否被弃用。 'ObjectStoreModel'也有pasteItem,试试。 [Doc](https://dojotoolkit.org/reference-guide/1.10/dijit/tree/ObjectStoreModel.html) – Stefano