2010-03-25 2 views
2

Добрый день всем.Условные операции перетаскивания в дереве Flex/AS3

Сейчас я работаю с иерархической древовидной структурой в AS3/Flex и хочу включить перетаскивание возможности при определенных условиях:

  1. только родитель/узлы верхнего уровня могут быть перемещены
  2. Родителя/узлы верхнего уровня должны оставаться на этом уровне; они не могут быть перемещены в дочерние узлы других родительских узлов.

Использование события 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 
} 

Может ли кто-нибудь дать совет, как это реализовать?

+1

Какой у вас источник данных? Я сделал это с XML, но это боль в тылу. – invertedSpear

+0

Datasource - это коллекция пользовательских объектов. Его третий компонент, который я загрузил, так что его сложно точно сказать, что происходит за кулисами. – user163757

ответ

1

Хорошо, не уверен, если это лакомый поможет, но когда я сделал это с XML я хотел бы получить объект целевого падения с:

var r:int = dropTarget.calculateDropIndex(evt); 
var node:XML = treeCurTemplate.indexToItemRenderer(r).data as XML; 

Тогда я сравнил бы LocalName мишени для localName элемента, который я перетаскивал. Локальное имя было тем, что я использовал для управления ветвлением дерева, так что это имело смысл. Возможно, вы можете использовать это, чтобы найти какой-то способ сделать это с вашими объектами.

Смежные вопросы