![]() |
|
||||||||||
|
|||||||
|
|
« Предыдущая тема | Следующая тема » |
| Опции темы | Опции просмотра |
|
![]() |
![]() |
|
|||||
|
Здравствуйте
У меня есть 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 нет детей, а визуально он есть, тот который я перетащил -------------- Вроде, сделал но как-то кривовато мне кажется, покритикуйте пожалуйста <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> package { [RemoteClass] public class SomeDataVO { public var id:int; [Bindable] public var label:String; public function SomeDataVO() { } } } Последний раз редактировалось djyamato; 08.05.2012 в 14:47. |
![]() |
![]() |
Часовой пояс GMT +4, время: 03:30. |
|
|
« Предыдущая тема | Следующая тема » |
|
|