React-dnd: Correction des sources de glissement imbriquées et de leur fonctionnement avec canDrag

Créé le 27 févr. 2015  ·  4Commentaires  ·  Source: react-dnd/react-dnd

Ceci est lié au n ° 87 mais plus technique. Les sources de glissement actuellement imbriquées s'activeront ensemble. C'est un comportement très, très faux. La source de glissement enfant doit _toujours_ empêcher le parent de s'activer.

Mais ce n'est pas aussi simple qu'il n'y paraît avec le backend HTML5.

J'ai essayé d'ajouter e.stopPropagation() dans le gestionnaire dragstart , mais il y a un autre problème. Supposons que List et Card sont tous deux des sources de glissement, Card est à l'intérieur de List . Supposons que Card a canDrag(): false . Nous ne pouvons pas appeler stopPropagation() dans ce cas, car cela empêcherait l'événement d'atteindre le parent.

D'accord, ajoutons plutôt if (DragOperationStore.isDragging()) return; au gestionnaire dragstart . Mais il y a un autre problème: même si l'événement a maintenant atteint le parent, si vous faites réellement glisser, le navigateur utilisera la cible d'origine (enfant) comme aperçu de glissement.

Cela peut probablement être résolu en utilisant explicitement this.getDOMNode() comme dragPreview s'il n'est pas spécifié dans beginDrag , de sorte que l'aperçu du glissement soit garanti comme la cible actuelle. Je ne l'ai pas encore essayé. Quoi qu'il en soit, cela ne semble pas être un problème complexe, et c'est à gagner!

bug up for grabs

Commentaire le plus utile

Existe-t-il une solution pour arrêter d'appeler le parent lorsque la fonction canDrag renvoie false ?

Tous les 4 commentaires

Certes, nous avons besoin de certaines contraintes sur le dragPreview

Comme quoi?

Corrigé dans la version 0.9.2.
Démo en direct: http://gaearon.github.io/react-dnd/#/nesting -sources

Existe-t-il une solution pour arrêter d'appeler le parent lorsque la fonction canDrag renvoie false ?

Cette page vous a été utile?
0 / 5 - 0 notes