Форум Flasher.ru
Ближайшие курсы в Школе RealTime
Список интенсивных курсов: [см.]  
  
Специальные предложения: [см.]  
  
 
Блоги Правила Справка Пользователи Календарь Сообщения за день
 

Вернуться   Форум Flasher.ru > Flash > Flex

Версия для печати  Отправить по электронной почте    « Предыдущая тема | Следующая тема »  
Опции темы Опции просмотра
 
Создать новую тему Ответ
Старый 06.10.2009, 00:54
Gaen вне форума Посмотреть профиль Отправить личное сообщение для Gaen Найти все сообщения от Gaen
  № 1  
Ответить с цитированием
Gaen
strange mood
 
Аватар для Gaen

модератор форума
Регистрация: Jul 2004
Адрес: Питер
Сообщений: 1,653
Записей в блоге: 1
Отправить сообщение для Gaen с помощью ICQ Отправить сообщение для Gaen с помощью Skype™
По умолчанию Перетаскивание элементов внутри Tree - как выяснить, что куда перетащили?

Компонент Tree позволяет перетаскивать элементы между папками, при этом элементы перемещаются туда, куда их перетащили. Как узнать, какой элемент куда перетащили? Это нужно для того, чтобы отправить на сервер запрос о перемещении элемента из одной категории в другую.
__________________
тонкий тролль, осеянный благодатью

Старый 06.10.2009, 01:59
wvxvw вне форума Посмотреть профиль Отправить личное сообщение для wvxvw Найти все сообщения от wvxvw
  № 2  
Ответить с цитированием
wvxvw
Modus ponens
 
Аватар для wvxvw

модератор форума
Регистрация: Jul 2006
Адрес: #1=(list #1#)
Сообщений: 8,049
Записей в блоге: 38
Не пробуя, на угад:
подписаться на dragComplete / paste, у евента dragSource будет по идее перетаскиваемым объектом... И потом через getParentItem() отыскать куда он упал. Вопрос в том, что именно вы подразумеваете под "куда перетащили", вполне возможно, что будет менее затратно просто сравнить XML (если провайдер XML) до и после.
__________________
Hell is the possibility of sanity

Старый 06.10.2009, 04:49
Gaen вне форума Посмотреть профиль Отправить личное сообщение для Gaen Найти все сообщения от Gaen
  № 3  
Ответить с цитированием
Gaen
strange mood
 
Аватар для Gaen

модератор форума
Регистрация: Jul 2004
Адрес: Питер
Сообщений: 1,653
Записей в блоге: 1
Отправить сообщение для Gaen с помощью ICQ Отправить сообщение для Gaen с помощью Skype™
После долгого вдумчивого чтения кода Tree пришёл к вот такому решению:
Код AS3:
this.structureTree.calculateDropIndex(e);
 
var dd	:Object	=	this.structureTree.mx_internal::_dropData;
 
if(dd.parent)trace(dd.parent.@title); else trace('root');
У этого компонента есть очень полезная функция updateDropData, которая вычисляет и буквально приносит на блюдечке много чего полезного, в том числе ссылку на текущий родительский элемент. Правда блюдечко это находится в пространстве mx_internal, а сама функция приватная Но зато есть функция calculateDropIndex, которая фактически её и вызывает. Теперь всё в ажуре: сравниваем parent до и после перетаскивания и делаем что хотим.

Добавлено через 1 час 14 минут
И только потом наткнулся на метод getParentItem.

Пойду-ка я спать лучше.
__________________
тонкий тролль, осеянный благодатью

Старый 14.10.2009, 19:30
WhiteWoolf вне форума Посмотреть профиль Отправить личное сообщение для WhiteWoolf Найти все сообщения от WhiteWoolf
  № 4  
Ответить с цитированием
WhiteWoolf

Регистрация: Sep 2009
Сообщений: 5
Господа, боюсь, что я присоединяюсь к вопросу, и никак не могу удовлетвориться ответом. Если можно, чуть-чуть подробнее.
Конкретно, задача очень простая. Есть dataprovider (XMLList):
Код AS3:
	<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>
Он подцеплен к дереву, и поле szName выводится в качестве labelField. Т.е. как-то так:
Код AS3:
<mx:Tree id="theTreeCtrl" labelField="@szName" showRoot="false"
 dataProvider="{treeData}" dragEnabled="true" dropEnabled="true" 
dragDrop="handlerDragDrop(event)"/>
(Код на ходу упрощал, так что если есть мелкие нестыковки - извиняйте ...)
Инициированный Drag and Drop великолепно работает. Но при окончательной обработке требуется провести ряд действий с атрибутами szIndex из соответсвующих элементов дерева. Я легко достаю этот атрибут из элемента КОТОРЫЙ перетаскивается. Выглядит это примерно так:
Код AS3:
		protected function handlerDragDrop(theEvent:DragEvent):void{
			var myData:Array = theEvent.dragSource.dataForFormat("treeItems") as Array;
			var szIndexSource:String = myData[0].@szIndex;
 
			return;
		}
А как добраться до этого же значения элемента, на который его бросили? Т.е. Я определяю номер его строки на экране (с учетом открытых и схлопнутых веток)
Код AS3:
var nLine:int = theTreeCtrl.calculateDropIndex(theEvent);
А чего с ним делать дальше? Как добраться до DataProvider-а, а точнее до нужного элемента в нем?

Заранее, спасибо.

Добавлено через 15 часов 44 минуты
Если кому еще интересна эта тема, я все таки разобрался. Полученный через calculateDropIndex индекс следует присвоить в selectedIndex и тогда из selectedItem можно будет извлекать необходимые значения.
Побочный эффект данного решения в том, что смещается выделение в дереве и не совсем понятно поведение при множественном выделении. Однако как базовое решение - вполне пригодно.
Итого: для работы с данными элемента на который брошен перетаскиваемый элемент следует писать:
Код AS3:
			var nLine:int = theTreeCtrl.calculateDropIndex(theEvent);
			theTreeCtrl.selectedIndex = nLine; 
			var szIndexDestinct:String = theTreeCtrl.selectedItem.@szIndex;

Создать новую тему Ответ Часовой пояс GMT +4, время: 06:51.
Быстрый переход
  « Предыдущая тема | Следующая тема »  

Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.


 


Часовой пояс GMT +4, время: 06:51.


Copyright © 1999-2008 Flasher.ru. All rights reserved.
Работает на vBulletin®. Copyright ©2000 - 2024, Jelsoft Enterprises Ltd. Перевод: zCarot
Администрация сайта не несёт ответственности за любую предоставленную посетителями информацию. Подробнее см. Правила.