3

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

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

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

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

是否删除了对嵌套目标的支持?有什么办法可以做到这一点?

4

3 回答 3

1

对于这种情况,我使用了一种解决方法。我创建了另一个 DIV 元素,它位于嵌套目标的相同位置,宽度和高度相同,但 z-Index 值更高。然后新的 DIV 元素覆盖嵌套的目标。当用户试图放置在嵌套目标上时,他实际上会下降到上面的新 DIV 元素。只要新的 DIV 元素没有嵌套在父放置目标中,Dojo 的 dnd 操作就可以正常工作。我通常将新的 DIV 元素作为 body 元素的子元素。

您需要做的是在 中创建新的 DIVonDndStart并将其销毁onDndCancel,然后一切都应该正常工作。

于 2010-03-08T08:44:40.340 回答
1

当前不支持嵌套源/目标。在大多数情况下,您可以通过使用独立的源/目标来解决此限制,但使用 CSS 将它们定位为您希望的位置。

于 2010-01-17T06:53:55.413 回答
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-Parameter:

var parentDndSource = new dojoDndSource(parentNode, {..});
var childDnDSource = new nestedDndSource(childNode,{
                        parentSource: parentDndSource,
                        onDropExternal: ...
                     });

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

于 2015-04-23T14:34:19.810 回答