Имелись две проблемы.
Я применил сортировку к ArrayCollection, и в поле не было предмета. Я скопировал код из другого проекта, и поле было «@name», поскольку это был XMLListCollection. Поле сортировки должно быть установлено как «имя».
Поэтому, когда вы устанавливаете свойство selectedItem, оно выглядит в коллекции, и если коллекция имеет сортировку, то она выглядит в вызове findItem(), который выполняет функцию сравнения, которая проверяет, имеет ли элемент имя поля в элементе. Если это не ошибка, это вызывает ошибку. Поскольку у меня было неправильное имя поля, была выбрана ошибка. Если ошибка выбрана, преследование для поиска выбранного объекта будет отменено, а выбранный индекс равен -1.
код из ListCollectionView.as:
try
{
return sort.findItem(localIndex, values, mode, insertIndex);
}
catch (e:SortError)
{
// usually because the find critieria is not compatible with the sort.
}
return -1;
код из Sort.as:
var hasFieldName:Boolean;
try
{
hasFieldName = values[fieldName] !== undefined;
}
catch(e:Error)
{
hasFieldName = false;
}
if (hasFieldName)
{
if (!hadPreviousFieldName)
{
message = resourceManager.getString(
"collections", "findCondition", [ fieldName ]);
throw new SortError(message);
}
else
{
fieldsForCompare.push(fieldName);
}
}
Вторая проблема в том, что список использует точный оператор равенства поэтому он использует "===" вместо «==». Это означает, что вы должны убедиться, что вы передаете точный экземпляр элемента в списке.