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

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

Версия для печати  Отправить по электронной почте    « Предыдущая тема | Следующая тема »  
Опции темы Опции просмотра
 
Создать новую тему Ответ
Старый 28.02.2008, 13:17
SSergeyS вне форума Посмотреть профиль Отправить личное сообщение для SSergeyS Найти все сообщения от SSergeyS
  № 1  
Ответить с цитированием
SSergeyS

Регистрация: Sep 2007
Сообщений: 36
Question drag&drop в mx:Tree

Приветствую!
Вынужден еще раз вернутся к вопросу drag&drop
Я пытаюсь реализовать mx:Tree с возможностью перетаскивать элементы дерева в пределах одного уровня вложенности но разных веток. Тобиш таскаемая ветка ни при каких условиях не должна менять уровень вложенности.
Tree:
Код:
<mx:Tree
labelField="@label" showRoot="false"
dragEnabled="true" dropEnabled="true" 
dragDrop="dragDropHandler(event);"
dataProvider="{MyXML}">
</mx:Tree>
MyXML:
Код:
<root>
<node isBranch='true' l=”0” label=”1”>
	<node l=”1” label=”a”></node>
<node l=”1” label=”b”></node>
</node>
<node isBranch='true' l=”0” label=”2”>
</node>
<node isBranch='true' l=”0” label=”3”>
	<node l=”1” label=”c”></node>
</node>
</root>
dragDropHandler:
Код:
private function dragDropHandler(event:DragEvent):void
{			 
var node_t:Array = event.dragSource.dataForFormat("treeItems") as Array;
Alert.show(String(node_t[0].@l));

дальше проверка вложенности и соответственно перемещение нода.
}
Я застрял на последней функции.
Посмотрел доку про DragEvent и DragManager. Но не могу разобраться как получить оба нода:в который перетаскивается и тот который мы непосредственно тянем. Чтобы сделать нормальную проверку и, например, записывать в историю, что куда перетягивали.

В event.currentTarget лежит Все дерево с dataProvider но как понять в какой именно нод MyXML мы перетянули объект?

Старый 28.02.2008, 14:47
FlexOkeks вне форума Посмотреть профиль Отправить личное сообщение для FlexOkeks Найти все сообщения от FlexOkeks
  № 2  
Ответить с цитированием
FlexOkeks
 
Аватар для FlexOkeks

Регистрация: Sep 2007
Адрес: Путенбург
Сообщений: 147
Цитата:
Сообщение от SSergeyS
как получить оба нода:в который перетаскивается и тот который мы непосредственно тянем. Чтобы сделать нормальную проверку и, например, записывать в историю, что куда перетягивали.
Тот который мы непосредственно тянем я брал из selectedItems. А чтобы определить нод в который перетаскивается, я сделал так:
Код:
	protected var _dropTargetItem:Оbject;
	protected override function dragOverHandler(evt:DragEvent):void {
		var renderer:Object = indexToItemRenderer(calculateDropIndex(evt));
		if(renderer) { 
			_dropTargetItem = renderer.data;
		}else {
			_dropTargetItem = null;
		}
		super.dragOverHandler(evt);
	}
Обработчик ловит индекс видимого объекта над которым мы тащим курсор и получает ссылку на ноду, если она есть. Это не обязательно ловить на dragOverHandler можно ловить и на dragDropHandler.
__________________
<!-- КРЭКС ПЭКС ФЛЭКС -->

Старый 28.02.2008, 16:52
SSergeyS вне форума Посмотреть профиль Отправить личное сообщение для SSergeyS Найти все сообщения от SSergeyS
  № 3  
Ответить с цитированием
SSergeyS

Регистрация: Sep 2007
Сообщений: 36
Код:
var node_t:Array = event.dragSource.dataForFormat("treeItems") as Array
Alert.show(String(node_t[0]));
Интересно что в node_t[0] тоже будет нод на который мы отпустили объект?!?!?!

А ни у кого нет под рукой примера с подробным разбором, в какой переменной, что лежит в событии DragEvent

В каком событии можно после некой проверки запрещать или разрешать "drop"?


Последний раз редактировалось SSergeyS; 03.03.2008 в 12:02.
Старый 05.03.2008, 10:20
SSergeyS вне форума Посмотреть профиль Отправить личное сообщение для SSergeyS Найти все сообщения от SSergeyS
  № 4  
Ответить с цитированием
SSergeyS

Регистрация: Sep 2007
Сообщений: 36
Вся проблема в том что «drag&drop» происходит в пределах одного компонента "Tree"?
У меня не получается нормально отследить все этапы перетаскивания элементов и при необходимости отменить или запретить перетаскивание текущего элемента.

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

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

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


 


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


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