我有两个mx:TileList
控件,可用来批量编辑对象。第一个包含所有可用数据的集合,第二个包含当前批次。两者都绑定到ArrayCollections
,并且使用TileList控件的本机拖放功能将对象在它们之间拖动时,数据从一个ArrayCollection
移至另一个。
当批计数从0到n或n到0项时,我需要更改currentState
以显示并重置批处理操作控件。基于the documentation,我本以为我应该听dragComplete
事件,但是我的测试表明,它不会触发数据从源ArrayCollection删除并添加到目标ArrayCollection之后的触发,而是触发(一致)在这两个动作之间。
这两个列表与此类似:
<mx:TileList
id="srcList"
dragEnabled="true"
dropEnabled="true"
dragMoveEnabled="true"
dataProvider="{images}"
dragComplete="handleDragComplete(event)"
allowMultipleSelection="true"
/>
这是
handleDragComplete
函数的来源:private function handleDragComplete(e:DragEvent):void{
trace(e.dragInitiator.name + '.dragComplete: batch.length=' + batch.length.toString());
trace(e.dragInitiator.name + '.dragComplete: images.length=' + images.length.toString());
if (batch.length > 0){
currentState = 'show';
}else{
currentState = '';
}
}
最后,这是运行代码的一些示例输出。这些都一个接一个地运行。
情况1:
该应用程序在第一个列表中加载了10个对象,并且该批次为空。我将1个对象从源列表拖动到批处理列表。
srcList.dragComplete: batch.length=1
srcList.dragComplete: images.length=10
(预期:1.9)
显然,该对象已添加到批处理ArrayCollection中,但尚未从源中删除。
情况2:
现在,我将第二个对象拖到批处理中。
srcList.dragComplete: batch.length=2
srcList.dragComplete: images.length=9
(预期:2,8)
首先,我们可以看到images.length发生了变化,显示出我在从拖动源列表到批处理列表中拖动的对象是在拖动dragComplete事件后删除的。
这次发生了相同的事情:将新对象添加到批处理ArrayCollection(batch.length = 2)中,触发
dragComplete
事件(运行这些跟踪),然后从源ArrayCollection中删除该对象。情况3:
现在,我将两个图像从批处理列表拖回到源列表中的原始位置。
batchList.dragComplete: batch.length=2
batchList.dragComplete: images.length=10
(预期:0,10)
我们可以看到batch.length并没有减少,但是源图像数组又恢复了其原始长度10。
问题:我做错什么了吗?我还能听另一件事吗? (请注意:为了确定,我同时尝试了
DragExit
和DragDrop
,它们的行为均符合预期,但不是我所需要的。)还是有另一种方法来获取所需的数据?或者...我是否在SDK中发现错误? 最佳答案
您可以在目标ArrayCollection上侦听collectionChange事件吗?
batch.addEventListener(CollectionEvent.COLLECTION_CHANGE, handleBatchCollectionChange);
关于apache-flex - Flex拖放:检测何时将所有数据从源移动到目标,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/1520830/