我有两个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。

问题:我做错什么了吗?我还能听另一件事吗? (请注意:为了确定,我同时尝试了DragExitDragDrop,它们的行为均符合预期,但不是我所需要的。)还是有另一种方法来获取所需的数据?或者...我是否在SDK中发现错误?

最佳答案

您可以在目标ArrayCollection上侦听collectionChange事件吗?

batch.addEventListener(CollectionEvent.COLLECTION_CHANGE, handleBatchCollectionChange);

关于apache-flex - Flex拖放:检测何时将所有数据从源移动到目标,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/1520830/

10-10 04:27