Добрый день всем.
В настоящее время я работаю с иерархической древовидной структурой в AS3 / Flex и хочу включить возможности перетаскивания при определенных условиях:
- Можно перемещать только узлы родительского / верхнего уровня
- Узлы родительского / верхнего уровня должны оставаться на этом уровне; их нельзя переместить в дочерние узлы других родительских узлов
Используя событие dragEnter дерева, я могу легко обработать условие 1.
private function onDragEnter(event:DragEvent):void
{
// only parent nodes (map layers) are moveable
event.preventDefault();
if(toc.selectedItem.hasOwnProperty("layer"))
DragManager.acceptDragDrop(event.target as UIComponent);
else
DragManager.showFeedback(DragManager.NONE);
}
Обработка второго условия оказывается немного сложнее. Я уверен, что событие dragOver - место для логики. Я экспериментировал с CalculateDropIndex, но это всегда дает мне индекс родительского узла, который не помогает проверить, является ли место потенциального отбрасывания приемлемым или нет. Ниже приведен псевдокод того, чего я хочу достичь.
private function onDragOver(e:DragEvent):void
{
// if potential drop location has parents
// dont allow drop
// else
// allow drop
}
Может кто-нибудь дать совет, как это реализовать?