拖动组件之间的Drop spark List Itemrenderer

时间:2011-03-20 11:44:46

标签: drag-and-drop flex4

我正在尝试在位于不同组件中的2个Spark列表之间进行拖放操作。 因为我的第一次尝试不起作用,我决定谷歌它并阅读更多关于DragAndDrop ...尝试了我能找到的所有例子,但没有任何接缝适合我。

所以,让我们谈谈。

  • 组件A具有List1
  • 组件B具有List2

组件A - 列表1 dragEnabled="true"mouseDown="initiateDrag(event)"

private function initiateDrag(e:MouseEvent):void{
    var dragInitiator:IUIComponent = e.target as IUIComponent;
    var de:DragSource = new DragSource;
    de.addData(dragInitiator, 'artist');
    DragManager.doDrag(dragInitiator, de, e);
}

根据我的阅读,使用mouseDown我正在开始一个拖动事件,创建我要拖动的数据...这个案例'artist'

组件B - 列表2 有dropEnabled =“true”,dragEnter =“dragEnterHandler(event)”和dragDrop =“dragDropHandler(event)”

private function dragEnterHandler(e:DragEvent):void{
    if(e.dragSource.hasFormat('artist')){
        DragManager.acceptDragDrop(List(e.currentTarget));
    }
}

现在,我期待的是,当我将itemRender从组件A列表1 拖过组件B列表2 时调用函数{{1} },它确实......但我也期待dragEnterHandler(event)可以将指标从“红叉”更改为“绿色加”并且那是没有发生的...因此,被拖动的itemRender(proxi)移回原来的列表,在这种情况下它会移回组件A列表1

我已经花了几个小时调试和测试其他方法,没有任何接缝为我工作。

这里有没有人熟悉可能对我有帮助的组件之间的拖放?

1 个答案:

答案 0 :(得分:0)

好吧,看起来好像在2天后4小时我得到了解决方案:)

我以完全错误的方式看待这个问题。 当使用拖放与基于列表的组件时,'格式'始终是'itemsByIndex',我试图接受'artist''格式'。

问题: 您有多个List使用拖放方法接受数据。 不同的列表必须接受不同类型的数据。

解决方案: 将<s:List/>换行<s:Group/>并手动调用dragEnter事件,然后通过选中'format'来调用可以接受或拒绝拖动数据的函数。 接受拖动源后,将调度dragDrop事件,您可以调用函数在应用程序中执行任何操作...例如,将拖动的数据添加到列表中。

注意: 请注意,如果tou直接在组件上设置了dragEnterdragDrop,则您将能够检查拖动的数据“格式”,因为所有列表控件都使用'format' 'itemsByIndex'

演示:

<fx:Script>
    <![CDATA[

    private function dragEnterHandler(e:DragEvent):void{
        if(e.dragSource.hasFormat('artist')){
            var dropTarget:Group = Group(e.currentTarget);
            DragManager.acceptDragDrop(dropTarget);
        }
    }

    private function dragDropHandler(e:DragEvent):void{
            // Check is the data alreay exists in the list;
            // Adds the data to the list dataGroup;
            // Do whatever you want ...     
    }

    ]]>
</fx:Script>

<s:Group id="myGroup" 
         dragDrop="dragDropHandler(event)" 
         dragEnter="dragEnterHandler(event)">
    <s:List id="myList" 
                dataProvider="{myDataProvider}"/>
</s:Group>

希望这有助于其他人遇到同样的问题! :)