2009-02-13 9 views
2

Je voudrais empêcher un utilisateur de faire glisser certains éléments d'un TileList à un autre. Si elles peuvent ou non être déposées dans TileList, elles doivent être déterminées en fonction des données associées à l'élément.Comment éviter qu'un objet ne soit déposé dans un TileList par un autre en utilisant Flex?

Pour montrer que l'élément ne peut pas être glissé dans TileList, je voudrais montrer la croix blanche normale dans l'icône du cercle rouge à côté du curseur. Si une chute est tentée quand il a été déterminé que la chute ne devrait pas se produire, je voudrais montrer un message d'alerte expliquant pourquoi cet objet n'a pas pu être supprimé.

Répondre

0

Vous devez empêcher l'action par défaut à la fois l'événement dragDrop (pour l'empêcher d'être ajouté à la nouvelle liste) et l'événement dragComplete (pour l'empêcher d'être retiré de l'ancienne liste) . Voici un exemple pour permettre éléments à déplacer dans une liste, mais pas entre les listes:

private var preventMove:Boolean = false; 
private function onDragDrop(event: DragEvent): void { 
    preventMove = (event.dragInitiator != event.target); 
    if (preventMove) 
     event.preventDefault(); 
} 

private function onDragComplete(event: DragEvent): void { 
    if (preventMove) { 
     event.preventDefault(); 
    } 
} 

Vous pouvez utiliser tous les critères que vous voulez en place de vérifier la dragInitiator contre la cible dragDrop. En plus d'appeler preventDefault sur dragComplete, vous pouvez afficher votre message d'erreur.

Si vous avez deux listes (ou TileLists ou autre):

<s:List dragDrop="onDragDrop(event)" dragComplete="onDragComplete(event)" 
     dragEnabled="true" dropEnabled="true" dragMoveEnabled="true"> 
</s:List> 
<s:List dragDrop="onDragDrop(event)" dragComplete="onDragComplete(event)" 
     dragEnabled="true" dropEnabled="true" dragMoveEnabled="true"> 
</s:List> 

Si vous n'avez pas besoin d'être en mesure de faire glisser les choses au sein de la même liste ou que vous ne glisser une direction qu'il peut être plus simple simplement en ne permettant pas tout sur les deux listes.

L'article lié par Chetan Sastry est maintenant vieux et a des liens brisés.