使用selectedIndices从ArrayCollection中删除多个项目

时间:2011-12-05 04:51:41

标签: actionscript-3 flex flex4

ArrayCollection spark.components.List是{{3}}的dataProviderallowMultipleSelection="true"myList.selectedIndices.sort(ascendingSort); // remove items, counting backwards for (var i:uint = myList.selectedIndices.length; i > 0; i--) { myArrayCollection.removeItemAt(myList.selectedIndices[i-1]); } 。有一个“删除所选项目”按钮,该按钮在单击时启动从ArrayCollection中删除所有选定项目。

我目前使用以下方法:

ascendingSort

removeItemAt符合您的期望;)。它工作正常,我知道总是工作。

然而,我确实注意到如果我完全忽略了这种情况,令我惊讶的是删除仍然有效。原因是,当selectedIndices被调用时,removeItemAt会相应更新。

所以我的问题是:可以依靠selectedIndices调用更新{{1}}中的值吗?或者可能在运行时和/或Flex SDK版本之间有所不同?

显然,如果它是可靠的,那么排除这种情况将是一个重大改进。

2 个答案:

答案 0 :(得分:1)

  

可以依赖removeItemAt调用来更新中的值   将selectedIndices?

显然在你的用例中,是的。

  

或者在运行时和/或Flex之间可能会有所不同   SDK版本?

它可能会在未来某个时候发生变化,或者之前可能已发生变化。我知道根据我对基于列表的类的经验,有时修改dataProvider可能会导致列表返回“无选择”状态。删除不允许多选的列表上的单个selectedItem就是一个很好的例子。

通常,在我使用的应用程序中,我不会根据用户在列表中的选择从列表中删除项目;相反,它们通常根据实际对象中的某些标准被删除(或过滤)。该条件通常是一个布尔值,与DataGrid列中显示的复选框相关。

答案 1 :(得分:0)

var indexes:Vector.<Object> = list.selectedItems;

while(indexes.length > 0 )
{
    var item:* = indexes.pop();
    var remindex:int = list.dataProvider.getItemIndex(item);

    if (remindex != -1)
    {
        list.dataProvider.removeItemAt(remindex);
    }
}