我有一个列表并将列表设置为其中的确切项目,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 :(得分: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);
}
}
第二个问题是List使用精确的相等运算符,因此它使用“===”而不是“==”。这意味着您必须确保传递列表中项目的确切实例。