Элементы в списке никогда не выбираются

У меня есть список, и установка списка на точный элемент, который находится в его dataProvider, не будет выбирать его программно. Вот код:

            if (list.selectedItem != iDocument) {

                var length:int = documentsCollection.length;
                for (var i:int;i<length;i++) {
                    jDocument = IDocumentData(documentsCollection.getItemAt(i));


                    if (jDocument.uid==iDocument.uid) {
                        list.selectedItem = IDocumentData(documentsCollection.getItemAt(i));
                        break;
                    }
                }
            }

1 ответ

Решение

Были две проблемы.

Я применил сортировку к 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);
        }
    }

Вторая проблема заключалась в том, что List использует оператор точного равенства, поэтому он использует "===" вместо "==". Это означает, что вы должны убедиться, что передаете точный экземпляр элемента в списке.

Другие вопросы по тегам