我有一个使用 dijit/Tree
和 dijit/tree/dndSource
的项目,用户可以使用拖放来移动树项目以进行更改。我正在使用 dojo 版本 1.10.4请参阅此处的 jsfiddle
我需要在转换完成时收到通知。看起来 onDndDrop
显然是捕获此事件的地方,但文档表明,扰乱此事件不是一个好主意:
来自上面的文档...
主题处理器
定义了以下主题监听器:onDndSourceOver、onDndStart、onDndDrop、onDndCancel。这些主题由经理发布。如果您想覆盖主题监听器,请阅读主题摘要。
警告:在大多数情况下您想要使用事件。主题是低级构造,在内部使用,通常不应该用于自定义。
---------结束文档------------
那么,我如何才能收到放置完成时的通知,以便我可以使用 ajax 更新服务器端的某些项目?我需要的是使用 dijit/tree/dndSource 对象提供的 onDndDrop 事件,但文档说不应该弄乱它。在上面的 jsfiddle 示例中,我在 tree
对象创建中注释掉了 //onDndDrop:treeDropEvt,
。如果将其添加到树创建中,当用户将树项移动到树中的另一个位置时,treeDropEvt
将被调用,但可以在控制台中看到错误并且移动不会发生。
如果我必须使用 onDndDrop
事件,我该如何创建它,这样我就不会收到错误并且它可以正常运行???
最佳答案
我在TreeStoreModel
的pasteItem
函数中做了你想做的事情。 TreeStoreModel 是 Dojo Tree 的存储。
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
});
关于javascript - 放置完成时的拖放事件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43352071/