我正在尝试在位于不同组件中的2个Spark列表之间进行拖放操作。 因为我的第一次尝试不起作用,我决定谷歌它并阅读更多关于DragAndDrop ...尝试了我能找到的所有例子,但没有任何接缝适合我。
所以,让我们谈谈。
组件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
我已经花了几个小时调试和测试其他方法,没有任何接缝为我工作。
这里有没有人熟悉可能对我有帮助的组件之间的拖放?
答案 0 :(得分:0)
好吧,看起来好像在2天后4小时我得到了解决方案:)
我以完全错误的方式看待这个问题。 当使用拖放与基于列表的组件时,'格式'始终是'itemsByIndex',我试图接受'artist''格式'。
问题: 您有多个List使用拖放方法接受数据。 不同的列表必须接受不同类型的数据。
解决方案:
将<s:List/>
换行<s:Group/>
并手动调用dragEnter
事件,然后通过选中'format'
来调用可以接受或拒绝拖动数据的函数。
接受拖动源后,将调度dragDrop
事件,您可以调用函数在应用程序中执行任何操作...例如,将拖动的数据添加到列表中。
注意:
请注意,如果tou直接在组件上设置了dragEnter
和dragDrop
,则您将能够检查拖动的数据“格式”,因为所有列表控件都使用'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>
希望这有助于其他人遇到同样的问题! :)