这与#87有关,但技术性更高。 当前嵌套的拖动源将一起激活。 这是非常非常错误的行为。 子级拖动源应_always_阻止父级激活。
但这并不像HTML5后端那样简单。
我尝试将e.stopPropagation()
到dragstart
处理程序中,但是还有另一个问题。 假设List
和Card
都是拖动源, Card
在List
。 假设Card
具有canDrag(): false
。 在这种情况下,我们无法调用stopPropagation()
,因为那样会阻止事件到达父级。
好的,让我们将if (DragOperationStore.isDragging()) return;
到dragstart
处理程序中。 但是还有另一个问题:即使事件已经到达父级,但是如果您实际拖动,浏览器将使用原始(子级)目标作为拖动预览。
如果未在beginDrag
指定this.getDOMNode()
作为dragPreview
则可以通过使用this.getDOMNode()
来解决此问题,从而确保拖动预览是当前目标。 我还没有尝试过。 无论哪种方式,这似乎都不是一个复杂的问题,值得一试!
当然,我们需要对dragPreview进行一些约束
像什么?
在0.9.2中修复。
现场演示: http ://gaearon.github.io/react-dnd/#/nesting -sources
有没有解决方案可以在canDrag
函数返回false
时停止调用父级?
最有用的评论
有没有解决方案可以在
canDrag
函数返回false
时停止调用父级?