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

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

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

Регистрация: May 2007
Сообщений: 232
По умолчанию Редактируемый Tree

Привет, Всем!
Горю желанием написать редактируемый элемент Tree. Больше всего хотелось бы сделать этот элемент управления также, как организована панель слоев в программе AdobePhotoshop.
Т.е. мне нужен элемент Tree у которого можно:
1) Создавать элементы
2) Создавать папки
3) Удалять папки и элементы
4) Перемещать элементы и папки в иерархии отображения
5) Переименовывать элементы и папки

Задача оказалась несколько сложнее чем я думал. Вот то что у меня получилось:

Код AS3:
<?xml version="1.0" encoding="utf-8"?>
<mx:WindowedApplication xmlns:mx="http://www.adobe.com/2006/mxml" layout="vertical">
	<mx:Script>
		<![CDATA[
			import mx.collections.XMLListCollection;
			import flash.utils.*;
 
            [Bindable]
            private var _collection:XMLListCollection = new XMLListCollection( new XMLList() );
 
			private function newFolder():void {
				var item:XML = <item isBranch="true"/>;
				item.@label = "Папка " + Math.round(Math.random()*10);
				_collection.addItem( item );
			}
 
			private function newItem():void {
				var item:XML = <item/>;
				item.@label = "Элемент " + Math.round(Math.random()*10);
				_collection.addItem( item );
			}
 
			private function removeItem():void {
				var selectedItem:XML = tree.selectedItem as XML;
				if( !selectedItem ) return;
 
				var parent:XML = selectedItem.parent() as XML;
				if(parent) delete parent.*[selectedItem.childIndex()];
				else _collection.removeItemAt( _collection.getItemIndex(selectedItem) );
			}
		]]>
	</mx:Script>
 
	<mx:Tree id="tree" labelField="@label" dragEnabled="true" dropEnabled="true" width="300" height="450" dataProvider="{_collection}"/>
	<mx:HBox horizontalGap="4" width="300">
		<mx:Button click="newItem()" label="newItem" width="33%" />
		<mx:Button click="newFolder()" label="newFolder" width="33%"/>
		<mx:Button click="removeItem()" label="deleteItem" width="33%" />
	</mx:HBox>
</mx:WindowedApplication>
Вопрос же состоит в следующем. Подскажите верно ли я реализовал функцию removeItem()? Помоему я перемудрил, т.к. не нашел другого выхода. Удаление элемента оказалось более трудной задачей чем казалось.

Эту функцию я реализовал следующим образом:
1) Проверил есть ли у выбранного элемента "Папа". Если есть то из "Папы" удалил его.
2) Если "Папы" нет, значит этот элемент находится вверху иерарции XMLList и значит можно получить его Index и удалить из XMLListCollection непосредственно.

Скажите это верно или полный бред? Заранее благодарен!

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

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

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


 


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


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