我们可以在Dojo中嵌套目标吗?

时间:2010-01-16 22:28:01

标签: dojo dojo-dnd

我有两个嵌套在父div下的div,我希望所有这些都是源和dojo.dnd的目标。

我希望能够将节点添加到内容被删除的div上,并允许用户在3个div之间移动它。

像这样的东西 - http://www.upscale.utoronto.ca/test/dojo/tests/dnd/test_nested_drop_targets.html

这是我在旧版Dojo中实现的,并且似乎不适用于1.4

是否删除了对嵌套目标的支持?有没有办法实现这个目标?

3 个答案:

答案 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: ...
                     });

工作示例:https://jsfiddle.net/teano87/s4pe2jjz/1/