Удаление нескольких элементов из коллекции ArrayCollection с использованием selectedIndices - PullRequest
0 голосов
/ 05 декабря 2011

У меня есть ArrayCollection , то есть dataProvider для spark.components.List , который имеет allowMultipleSelection="true". Существует кнопка «Удалить выбранные элементы» , которая инициирует удаление всех выбранных элементов из коллекции ArrayCollection при нажатии.

В настоящее время я использую следующий метод:

myList.selectedIndices.sort(ascendingSort);

// remove items, counting backwards
for (var i:uint = myList.selectedIndices.length; i > 0; i--) {
  myArrayCollection.removeItemAt(myList.selectedIndices[i-1]);
}

где ascendingSort делает то, что вы ожидаете;). Он отлично работает, и я знаю, что он будет всегда работать.

Однако я принял к сведению, что, если я вообще пренебрегал сортировкой, к моему удивлению, удаление все равно работало. Причиной этого оказалось то, что когда вызывается removeItemAt, selectedIndices соответственно обновляются.

Итак, мой вопрос: Можно ли рассчитывать на removeItemAt вызов, обновляющий значения в selectedIndices? или это может отличаться в зависимости от времени выполнения и / или версий Flex SDK?

Очевидно, что если это надежно, то исключение сортировки будет значительным улучшением.

Ответы [ 2 ]

1 голос
/ 05 декабря 2011

Можно ли рассчитывать на вызов removeItemAt, обновляющий значения в selectedIndices?

Очевидно, в вашем случае использования, да.

или может оказаться, что это отличается от времени выполнения и / или Flex Версии SDK?

Это может очень хорошо измениться в какой-то момент в будущем или могло измениться раньше. Я знаю, что по своему опыту работы с классами на основе списка, иногда изменение dataProvider может привести к тому, что список вернется в состояние «нет выбора». Хорошим примером этого является удаление одного выбранного элемента в списке, который не допускает множественный выбор.

Обычно в приложениях, над которыми я работал, я не удаляю элементы из списка на основе выбора пользователя в списке; вместо этого они обычно удаляются (или отфильтровываются) на основе некоторых критериев в реальном объекте. И этот критерий обычно является логическим значением, которое относится к флажку, показанному в столбце DataGrid.

0 голосов
/ 17 апреля 2012
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);
    }
}
...