Добрый день всем.Условные операции перетаскивания в дереве Flex/AS3
Сейчас я работаю с иерархической древовидной структурой в 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
}
Может ли кто-нибудь дать совет, как это реализовать?
Какой у вас источник данных? Я сделал это с XML, но это боль в тылу. – invertedSpear
Datasource - это коллекция пользовательских объектов. Его третий компонент, который я загрузил, так что его сложно точно сказать, что происходит за кулисами. – user163757