![]() |
|
||||||||||
|
|||||||
|
|
« Предыдущая тема | Следующая тема » |
| Опции темы | Опции просмотра |
|
![]() |
![]() |
|
|||||
|
strange mood
|
Компонент Tree позволяет перетаскивать элементы между папками, при этом элементы перемещаются туда, куда их перетащили. Как узнать, какой элемент куда перетащили? Это нужно для того, чтобы отправить на сервер запрос о перемещении элемента из одной категории в другую.
__________________
тонкий тролль, осеянный благодатью |
|
|||||
|
Modus ponens
|
Не пробуя, на угад:
подписаться на dragComplete / paste, у евента dragSource будет по идее перетаскиваемым объектом... И потом через getParentItem() отыскать куда он упал. Вопрос в том, что именно вы подразумеваете под "куда перетащили", вполне возможно, что будет менее затратно просто сравнить XML (если провайдер XML) до и после.
__________________
Hell is the possibility of sanity |
|
|||||
|
strange mood
|
После долгого вдумчивого чтения кода Tree пришёл к вот такому решению:
this.structureTree.calculateDropIndex(e); var dd :Object = this.structureTree.mx_internal::_dropData; if(dd.parent)trace(dd.parent.@title); else trace('root'); Но зато есть функция calculateDropIndex, которая фактически её и вызывает. Теперь всё в ажуре: сравниваем parent до и после перетаскивания и делаем что хотим.Добавлено через 1 час 14 минут И только потом наткнулся на метод getParentItem. Пойду-ка я спать лучше.
__________________
тонкий тролль, осеянный благодатью |
|
|||||
|
Регистрация: Sep 2009
Сообщений: 5
|
Господа, боюсь, что я присоединяюсь к вопросу, и никак не могу удовлетвориться ответом. Если можно, чуть-чуть подробнее.
Конкретно, задача очень простая. Есть dataprovider (XMLList): <mx:XMLList id="treeData"> <node szName="Mail Box" szIndex="1"> <node szName="Inbox" szIndex="2"> <node szName="Marketing" szIndex="3"/> <node szName="Product Management" szIndex="4"/> <node szName="Personal" szIndex="5"/> </node> <node szName="Outbox" szIndex="6"> <node szName="Professional" szIndex="7"/> <node szName="Personal" szIndex="8"/> </node> <node szName="Spam" szIndex="9"/> <node szName="Sent" szIndex="10"/> </node> </mx:XMLList> <mx:Tree id="theTreeCtrl" labelField="@szName" showRoot="false" dataProvider="{treeData}" dragEnabled="true" dropEnabled="true" dragDrop="handlerDragDrop(event)"/> Инициированный Drag and Drop великолепно работает. Но при окончательной обработке требуется провести ряд действий с атрибутами szIndex из соответсвующих элементов дерева. Я легко достаю этот атрибут из элемента КОТОРЫЙ перетаскивается. Выглядит это примерно так: protected function handlerDragDrop(theEvent:DragEvent):void{ var myData:Array = theEvent.dragSource.dataForFormat("treeItems") as Array; var szIndexSource:String = myData[0].@szIndex; return; } А чего с ним делать дальше? Как добраться до DataProvider-а, а точнее до нужного элемента в нем? Заранее, спасибо. Добавлено через 15 часов 44 минуты Если кому еще интересна эта тема, я все таки разобрался. Полученный через calculateDropIndex индекс следует присвоить в selectedIndex и тогда из selectedItem можно будет извлекать необходимые значения. Побочный эффект данного решения в том, что смещается выделение в дереве и не совсем понятно поведение при множественном выделении. Однако как базовое решение - вполне пригодно. Итого: для работы с данными элемента на который брошен перетаскиваемый элемент следует писать: |
![]() |
![]() |
Часовой пояс GMT +4, время: 02:36. |
|
|
« Предыдущая тема | Следующая тема » |
|
|