Это связано с № 87, но имеет более технический характер. Вложенные в настоящее время источники перетаскивания активируются вместе. Это очень и очень неправильное поведение. Дочерний источник перетаскивания должен _всегда_ предотвращать активацию родителя.
Но с бэкэндом HTML5 все не так просто, как кажется.
Я попытался добавить e.stopPropagation()
в обработчик dragstart
, но возникла другая проблема. Предположим, что List
и Card
оба являются источниками перетаскивания, Card
находится внутри List
. Предположим, что в Card
есть canDrag(): false
. В этом случае мы не можем вызвать stopPropagation()
, потому что это помешает событию достичь родителя.
Хорошо, давайте вместо этого добавим if (DragOperationStore.isDragging()) return;
в обработчик dragstart
. Но есть еще одна проблема: даже если событие теперь достигло родителя, если вы действительно перетащите, браузер будет использовать исходную (дочернюю) цель в качестве предварительного просмотра перетаскивания.
Вероятно, это можно решить, явно используя this.getDOMNode()
как dragPreview
если это не указано в beginDrag
, так что предварительный просмотр перетаскивания гарантированно будет текущей целью. Еще не пробовал. В любом случае, это не кажется сложной проблемой, и ее нужно решать!
Конечно, нам нужны некоторые ограничения на dragPreview.
Как что?
Исправлено в 0.9.2.
Живая демонстрация: http://gaearon.github.io/react-dnd/#/nesting -sources
Есть ли решение прекратить вызов родителя, когда функция canDrag
возвращает false
?
Самый полезный комментарий
Есть ли решение прекратить вызов родителя, когда функция
canDrag
возвращаетfalse
?