Flex 4 - перетаскивание из списка - dragsource.dataForFormat ("itemsByIndex") является нулевым - PullRequest
2 голосов
/ 03 июня 2011

Заранее спасибо всем, кто пытается мне помочь,

Я работаю с Flex 4 и пытаюсь заставить Drag and Drop работать между списками, а также между списком и компонентом, не включенным в список.

У меня есть собственный itemRenderer, в котором есть изображение и метка.

Графически все работает отлично, но данные, которые прикрепляются к перетаскиваемому элементу, каждый раз отображаются в dragSource как null.

Вот мой код:

    <s:List dataProvider="{userInventory}" itemRenderer="renderers.InventoryItemRenderer" width="198" height="294" y="34" dragEnabled="true" dragMoveEnabled="true"  >
        <s:layout>
            <s:TileLayout />        
        </s:layout>
    </s:List>

</s:BorderContainer>
<!-- /User Inventory -->
<s:BorderContainer dragEnter="fndragEnterHandler(event);" 
                   dragOver="fndragOverHandler(event);"
                   dragDrop="fndragDropHandler(event);" includeIn="crib" x="243" y="206" width="200" height="200">
    <s:Label x="10" y="10" text="This is supposed to be a baby" width="178" height="24"/>
    <s:Label x="10" y="39" text="State:" width="42" height="19"/>
    <s:Label x="59" y="37" width="80" height="24" id="baby_state"/>

</s:BorderContainer>
private function fndragEnterHandler(event:DragEvent):void
        {

                DragManager.acceptDragDrop(IUIComponent(event.currentTarget));  
        }
        private function fndragOverHandler(event:DragEvent):void
        {

                DragManager.showFeedback(DragManager.MOVE);
        }

        private function dragOverCopyHandler(event:DragEvent):void {
            event.preventDefault();
            //if (event.dragSource.hasFormat("itemsByIndex"))
                DragManager.showFeedback(DragManager.COPY);
        }

        private function fndragDropHandler(event:DragEvent):void
        {
            //event.preventDefault();

            monsterDebugger.trace(this, event.dragSource, null, "DRAG DROP");


            var items:Vector = event.dragSource.dataForFormat("itemsByIndex") as Vector;
            var baby:Array = babyObject.source;

            monsterDebugger.trace(this, items, null, "DRAG DROP");

            items[0].baby_id = baby[0]['Baby']['id'];

            var item:Object = new Object();

            item.id = items[0].id;
            item.baby_id = items[0].baby_id;
            item.effect = JSON.decode(items[0].effect);


            sendAction(item, "baby", userFbData.id, "use_item_on_baby");



            //TextInput(event.currentTarget).text=itemsArray[0].label;
        }

А вот и мой элемент Renderer:

<mx:Image x="14" y="19" source="{data.image}" width="50" height="50" smoothBitmapContent="true"/>
<s:Label x="0" y="-1" text="{data.name}" fontFamily="Verdana" fontSize="12" color="#696565" width="80" height="21"/>

Элементы Vector в обработчике отбрасывания возвращаются к нулю каждый раз, и я не могу понять, почему.

Сначала я подумал, что это связано с тем, что этот конкретный случай не перетаскивается из Списка в Список, но я тоже попробовал это сделать, и dragSource.dataForFormat ("itemsByIndex") продолжает возвращать ноль.

Если кто-нибудь может указать мне правильное направление, я был бы очень признателен, я бился головой об этом два дня!

1 Ответ

0 голосов
/ 08 июля 2011

, приведенное вами к вектору, может уже аннулировать данные Dragsource.так что попробуйте с

var items:* = event.dragSource.dataForFormat("itemsByIndex"); 
...