我有两个嵌套在父 div 下的 div,我希望所有这些都成为 dojo.dnd 的源和目标。
我希望能够将节点添加到内容被删除的 div 中,并允许用户在 3 个 div 之间移动它。
像这样的东西 - http://www.upscale.utoronto.ca/test/dojo/tests/dnd/test_nested_drop_targets.html
这是我在旧版本的 Dojo 中实现的,似乎不适用于 1.4
是否删除了对嵌套目标的支持?有什么办法可以做到这一点?
我有两个嵌套在父 div 下的 div,我希望所有这些都成为 dojo.dnd 的源和目标。
我希望能够将节点添加到内容被删除的 div 中,并允许用户在 3 个 div 之间移动它。
像这样的东西 - http://www.upscale.utoronto.ca/test/dojo/tests/dnd/test_nested_drop_targets.html
这是我在旧版本的 Dojo 中实现的,似乎不适用于 1.4
是否删除了对嵌套目标的支持?有什么办法可以做到这一点?
对于这种情况,我使用了一种解决方法。我创建了另一个 DIV 元素,它位于嵌套目标的相同位置,宽度和高度相同,但 z-Index 值更高。然后新的 DIV 元素覆盖嵌套的目标。当用户试图放置在嵌套目标上时,他实际上会下降到上面的新 DIV 元素。只要新的 DIV 元素没有嵌套在父放置目标中,Dojo 的 dnd 操作就可以正常工作。我通常将新的 DIV 元素作为 body 元素的子元素。
您需要做的是在 中创建新的 DIVonDndStart
并将其销毁onDndCancel
,然后一切都应该正常工作。
当前不支持嵌套源/目标。在大多数情况下,您可以通过使用独立的源/目标来解决此限制,但使用 CSS 将它们定位为您希望的位置。
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-Parameter:
var parentDndSource = new dojoDndSource(parentNode, {..});
var childDnDSource = new nestedDndSource(childNode,{
parentSource: parentDndSource,
onDropExternal: ...
});