我有两个嵌套在父div下的div,我希望所有这些都是源和dojo.dnd的目标。
我希望能够将节点添加到内容被删除的div上,并允许用户在3个div之间移动它。
像这样的东西 - http://www.upscale.utoronto.ca/test/dojo/tests/dnd/test_nested_drop_targets.html
这是我在旧版Dojo中实现的,并且似乎不适用于1.4
是否删除了对嵌套目标的支持?有没有办法实现这个目标?
答案 0 :(得分:1)
目前不支持嵌套的源/目标。在大多数情况下,您可以通过使用独立的源/目标解决此限制,然后使用CSS定位它们。
答案 1 :(得分:1)
我在这种情况下使用了一种解决方法。我创建了另一个DIV元素,它位于嵌套目标的相同位置,具有相同的宽度和高度,但具有更高的z-Index值。然后新的DIV元素覆盖嵌套的目标。当用户试图放下嵌套目标时,他实际上会掉到上面的新DIV元素。只要新的DIV元素没有嵌套在父放置目标中,Dojo的dnd操作就可以正常工作。我通常将新的DIV元素作为body元素的子元素。
你需要做的是在onDndStart
中创建新的DIV并在onDndCancel
中销毁它,然后一切都应该运作良好。
答案 2 :(得分:0)
Dojo 1.10版仍然不支持嵌套Dnd。
CSS定位和叠加div对我来说不起作用。但是我注意到将一个元素从dndContainer拖到父dndContainer中并不会触发父元素的onMouseOverEvent。
如果有人仍在使用dojo并且遇到同样的问题,请按照以下方法解决此问题:
声明您自己的dndSource,例如nestedDndSource.js
define([
"dojo/_base/declare",
"dojo/dnd/Source",
"dojo/dnd/Manager"
], function(declare,dndSource, Manager){
var Source = declare("dojo.dnd.Source", dndSource, {
parentSource: null,
onOutEvent: function(){
if(this.parentSource != undefined)
Manager.manager().overSource(this.parentSource)
Source.superclass.onOutEvent.call(this);
}
});
return Source;
})
对子项使用nestedDndSource而不是dojos,并确保将父项的dndSource作为parentSource提供参数:
var parentDndSource = new dojoDndSource(parentNode, {..});
var childDnDSource = new nestedDndSource(childNode,{
parentSource: parentDndSource,
onDropExternal: ...
});