Как предотвратить попадание элемента в один TileList из другого с помощью Flex?

Я хотел бы запретить пользователю перетаскивать определенные элементы из одного TileList в другой. Могут ли они быть помещены в список TileList, следует определять на основе данных, связанных с элементом.

Чтобы показать, что элемент нельзя перетащить в TileList, я хотел бы показать нормальный белый крестик в красном круге рядом с курсором. Если выполняется попытка отбрасывания, когда было определено, что выпадение не должно происходить, я хотел бы показать предупреждающее сообщение, объясняющее, почему этот элемент не может быть отброшен.


person Community    schedule 13.02.2009    source источник


Ответы (1)


Вам нужно будет предотвратить действие по умолчанию как для события 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();
    }
}

Вы можете использовать любые критерии вместо проверки dragInitiator по отношению к цели dragDrop. Наряду с вызовом preventDefault для dragComplete вы можете вывести сообщение об ошибке.

Если у вас есть два списка (или 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>

Если вам не нужно перетаскивать элементы в одном и том же списке или вы перетаскиваете только в одном направлении, это может быть проще, если не включать все элементы в обоих списках.

Статья, на которую ссылается Четан Састри, теперь устарела и содержит неработающие ссылки.

person Brian Brady    schedule 07.10.2015