如何使用Flex防止项目从另一个TileList中删除?

时间:2009-02-13 00:36:13

标签: flex drag-and-drop

我想阻止用户将某些项目从一个TileList拖到另一个TileList。是否可以将它们放入TileList中应该基于与项目相关联的数据来确定。

要显示该项目无法拖入TileList,我想在光标旁边的红色圆圈图标中显示正常的白色十字。如果在确定不应该发生丢弃时尝试丢弃,我想显示一条警告消息,说明无法删除此项目的原因。

2 个答案:

答案 0 :(得分:3)

这篇文章可以帮到你。文章中的示例似乎正是您想要的。

http://butterfliesandbugs.wordpress.com/2007/10/10/cancelling-a-drag-action-in-list-components/

答案 1 :(得分:0)

您需要阻止对dragDrop事件(以阻止它添加到新列表)和dragComplete事件(以阻止它从旧列表中删除)的默认操作。以下是允许项目在列表中移动但不在列表之间移动的示例:

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();
    }
}

您可以使用您想要的任何标准来代替针对dragDrop目标检查dragInitiator。除了在dragComplete上调用preventDefault之外,您还可以弹出错误消息。

你有两个列表(或TileLists或其他):

<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>

如果您不需要能够在同一个列表中拖放内容,或者只是拖动一个方向,那么只是不启用两个列表中的所有内容就可以更简单。

由Chetan Sastry链接的文章现已陈旧,并且已断开链接。