React-dnd: Исправьте вложенные источники перетаскивания и их работу с canDrag

Созданный на 27 февр. 2015  ·  4Комментарии  ·  Источник: react-dnd/react-dnd

Это связано с № 87, но имеет более технический характер. Вложенные в настоящее время источники перетаскивания активируются вместе. Это очень и очень неправильное поведение. Дочерний источник перетаскивания должен _всегда_ предотвращать активацию родителя.

Но с бэкэндом HTML5 все не так просто, как кажется.

Я попытался добавить e.stopPropagation() в обработчик dragstart , но возникла другая проблема. Предположим, что List и Card оба являются источниками перетаскивания, Card находится внутри List . Предположим, что в Card есть canDrag(): false . В этом случае мы не можем вызвать stopPropagation() , потому что это помешает событию достичь родителя.

Хорошо, давайте вместо этого добавим if (DragOperationStore.isDragging()) return; в обработчик dragstart . Но есть еще одна проблема: даже если событие теперь достигло родителя, если вы действительно перетащите, браузер будет использовать исходную (дочернюю) цель в качестве предварительного просмотра перетаскивания.

Вероятно, это можно решить, явно используя this.getDOMNode() как dragPreview если это не указано в beginDrag , так что предварительный просмотр перетаскивания гарантированно будет текущей целью. Еще не пробовал. В любом случае, это не кажется сложной проблемой, и ее нужно решать!

bug up for grabs

Самый полезный комментарий

Есть ли решение прекратить вызов родителя, когда функция canDrag возвращает false ?

Все 4 Комментарий

Конечно, нам нужны некоторые ограничения на dragPreview.

Как что?

Исправлено в 0.9.2.
Живая демонстрация: http://gaearon.github.io/react-dnd/#/nesting -sources

Есть ли решение прекратить вызов родителя, когда функция canDrag возвращает false ?

Была ли эта страница полезной?
0 / 5 - 0 рейтинги