2013-12-17 2 views
1

У меня есть список и настройка списка на точный элемент, который находится в его 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; 
        } 
       } 
      } 

ответ

0

Имелись две проблемы.

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

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

 Смежные вопросы

  • Нет связанных вопросов^_^