У меня были отличные результаты при использовании mx.collections.ArrayCollection и mx.collection.IViewCursor для подобных ситуаций.
Использование ArrayCollection (что являетсяпо сути, ассоциативный массив) вы можете отслеживать, какие элементы в настоящий момент выбраны, сохраняя сами элементы:
private var currSelected:ArrayCollection = new ArrayCollection();
protected function multipleFormulaListChangeHandler(event:Event):void {
var numberSelected:uint = multFormulaList.selectedItems.length;
for each(var item:Object in multFormulaList.selectedItems) {
//add item to currSelected AC
currSelected.addItem(item);
}
}
Чтобы предотвратить введение дубликатов и всей причины даже упоминания курсоров или коллекций массивов в первомplace - вы также создадите курсор представления для того, что сейчас является вашей коллекцией массивов выбранных элементов, и использовали бы метод findAny () этого курсора (чтобы предотвратить дальнейшее зацикливание), чтобы установить существование элемента в вашей коллекции массивов выбранных элементов.Установите в условной форме внутри цикла, который вы сейчас делаете, вы получите что-то вроде этого:
import mx.collections.ArrayCollection;
import mx.collections.IViewCursor;
import mx.collections.Sort;
import mx.collections.SortField;
private var currSelected:ArrayCollection = new ArrayCollection();
//Be sure to run a sort on currSelected because cursors can only be created on sorted array collections
/*
var sort:Sort = new Sort();
sort.fields = [new SortField(null, true)];
currSelected.sort = sort;
*/
protected function multipleFormulaListChangeHandler(event:Event):void {
//create cursor
var cursor:IViewCursor = currSelected.createCursor();
//loop through selected items list comparing each looped item with the currSelected array for matches
for each(var item:Object in multFormulaList.selectedItems) {
if(!cursor.findAny(item)){
//no match found - add item to currSelected AC and create form field
currSelected.addItem(item);
//for add logic
var formitem:FormItem = new FormItem;
var forminput:TextInput = new TextInput;
formitem.addElement(forminput);
theform.addElement(formitem);
}else{
//match found - not adding
}
}
}