Форум Flasher.ru

Форум Flasher.ru (http://www.flasher.ru/forum/index.php)
-   Flex (http://www.flasher.ru/forum/forumdisplay.php?f=84)
-   -   DragDrop из List в List почему у получателя не меняется dataProvider (http://www.flasher.ru/forum/showthread.php?t=179149)

djyamato 08.05.2012 01:38

DragDrop из List в List почему у получателя не меняется dataProvider
 
Вложений: 1
Здравствуйте
У меня есть 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()
                {
 
                }
        }
}



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

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