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

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

Версия для печати  Отправить по электронной почте    « Предыдущая тема | Следующая тема »  
Опции темы Опции просмотра
 
Создать новую тему Ответ
Старый 08.05.2012, 01:38
djyamato вне форума Посмотреть профиль Отправить личное сообщение для djyamato Посетить домашнюю страницу djyamato Найти все сообщения от djyamato
  № 1  
Ответить с цитированием
djyamato
 
Аватар для djyamato

Регистрация: Feb 2006
Сообщений: 884
Записей в блоге: 2
Отправить сообщение для djyamato с помощью ICQ Отправить сообщение для djyamato с помощью Skype™
По умолчанию DragDrop из List в List почему у получателя не меняется dataProvider

Здравствуйте
У меня есть 2 листа
Пользователь из первого перетаскивает объект ImageVO

Мне нужно чтобы при drop на 2м листе создавался объект в его дата провайдере (ContentVO) одним из свойств которого был бы перетаскиваемый ImageVO

Во 2 м листе в слушателе dragDrop дата провайдер не меняется. Почему ?

Далее я формирую новый объект ContentVO, добавляю его в dataProvider 2го листа и вижу 2 айтема в нем
1й - ImageVO и 2й-ContentVO. Причем, в дата провайдере 2го нет элемента ImageVO
Что мне сделать чтобы в листе 2м не появлялся перетянутый ImageVO ?

P.S. Проверил, после dragDrop у 2го листа в скроллере в DataDroup нет детей, а визуально он есть, тот который я перетащил
Код AS3:
trace("elements:"+DataGroup(galleryContent.scroller.viewport).numElements);
// elements:0
--------------
Вроде, сделал но как-то кривовато мне кажется, покритикуйте пожалуйста
Код AS3:
<fx:Script>
		<![CDATA[
			import mx.collections.ArrayCollection;
			import mx.core.DragSource;
			import mx.events.CollectionEvent;
			import mx.events.CollectionEventKind;
			import mx.events.DragEvent;
			import mx.events.FlexEvent;
			import mx.managers.DragManager;
			import mx.messaging.AbstractConsumer;
			import mx.utils.ObjectUtil;
 
			import spark.components.Image;
 
			[Bindable]
			protected var someDataAC:ArrayCollection=new ArrayCollection();
 
			[Bindable]
			protected var contentAC:ArrayCollection=new ArrayCollection();
 
			protected function application1_creationCompleteHandler(event:FlexEvent):void
			{
				for(var i:int=0;i<5;i++)
				{
					var someData:SomeDataVO=new SomeDataVO();
					someData.id=Math.round(Math.random()*100);
					someData.label="data"+someData.id;
					someDataAC.addItem(someData);
				}
				contentAC.addEventListener(CollectionEvent.COLLECTION_CHANGE,contentDPChangeHandler);
			}
 
			protected function contentList_dragDropHandler(event:DragEvent):void
			{
				var dropTarget:List=List(event.currentTarget);                           
				var items:Array = Array(event.dragSource.dataForFormat("itemsByIndex"));
 
				// если нет пока дата провайдера нужно его завести
				if(!List(event.currentTarget).dataProvider)
				{
					List(event.currentTarget).dataProvider=new ArrayCollection();
				}
 
				// создание нового ContentVO, свойство data у которого брошенный в список объект SomeDataVO
				var newContentVO:ContentVO=new ContentVO();
				newContentVO.id=Math.round(Math.random()*1000);
				newContentVO.data=items[0][0];
				List(event.currentTarget).dataProvider.addItem(newContentVO);
			}
 
			protected function contentDPChangeHandler(event:CollectionEvent):void
			{
				switch(event.kind)
				{
					case CollectionEventKind.ADD:
 
						// при изменении дата провайдера (добавление элемента) проверяю тип добавленного, 
						//если он НЕ ContentVO, элемент нужно удалить из дата провайдера
						var indexesToRemove:Array=new Array();
						var i:int;
						for(i=0;i<contentList.dataProvider.length;i++)
						{
							if(!(contentList.dataProvider.getItemAt(i) is ContentVO))
							{
								indexesToRemove.push(i);
							}
						}
 
						for(i=0;i<indexesToRemove.length;i++)
						{
							contentList.dataProvider.removeItemAt(indexesToRemove[i]);
						}
						break;
				}
			}	
		]]>
	</fx:Script>
 
	<s:HGroup>
		<s:List id="dataList" 
				dragEnabled="true"
				itemRenderer="SomeDataItemRenderer"
				dataProvider="{someDataAC}"/>
		<s:List id="contentList" 
				dropEnabled="true"
				dataProvider="{contentAC}"
				itemRenderer="ContentItemRenderer"
				dragDrop="contentList_dragDropHandler(event)"/>
	</s:HGroup>
SomeDataVO
Код AS3:
package
{
	[RemoteClass]
	public class SomeDataVO
	{
		public var id:int;
 
		[Bindable]
		public var label:String;
 
		public function SomeDataVO()
		{
 
		}
	}
}
ContentVO
Код AS3:
package
{
	[RemoteClass]
	public class ContentVO
	{
		public var id:int;
 
		[Bindable]
		public var label:String;
 
		[Bindable]
		public var data:SomeDataVO;
 
		public function ContentVO()
		{
 
		}
	}
}
Изображения
 


Последний раз редактировалось djyamato; 08.05.2012 в 14:47.
Создать новую тему Ответ Часовой пояс GMT +4, время: 03:30.
Быстрый переход
  « Предыдущая тема | Следующая тема »  

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

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


 


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


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