Flex arraycollection getitemindex всегда возвращает -1 - PullRequest
2 голосов
/ 21 декабря 2011

Я столкнулся с той же проблемой.Могут ли некоторые объяснить мне пример?

Мой код:

var dataList:ArrayCollection = new ArrayCollection([{name:"alauddn"}, {name:"ansari"}]);

private function getItemInd(event:MouseEvent):void{

    var item:Object = new Object();
    item.name = "ansari";
    var ias:int = dataList.getItemIndex(item);
    Alert.show(ias.toString() + ": " + item.name);
}

Но он возвращает " -1 :

Ответы [ 3 ]

7 голосов
/ 21 декабря 2011

getItemIndex не сравнивает значение в вашей коллекции arrayCollection.Проблема в том, что метод getItemIndex () сопоставляет точные ссылки на объекты, а не объекты с совпадающими свойствами.

Вместо этого следует использовать решение, подобное этому:

<?xml version="1.0" encoding="utf-8"?>
<s:WindowedApplication xmlns:fx="http://ns.adobe.com/mxml/2009" 
    xmlns:s="library://ns.adobe.com/flex/spark" 
    xmlns:mx="library://ns.adobe.com/flex/mx" creationComplete="creationCompleteHandler(event)">

    <fx:Script>
        <![CDATA[
            import mx.collections.ArrayCollection;
            import mx.controls.Alert;
            import mx.events.FlexEvent;

            public var dataList:ArrayCollection = new ArrayCollection([{name:"alauddn"}, {name:"ansari"}]);

            public function getItemIndexByProperty(array:ArrayCollection, property:String, value:String):Number
            {
                for (var i:Number = 0; i < array.length; i++)
                {
                    var obj:Object = Object(array[i])
                    if (obj[property] == value)
                        return i;
                }
                return -1;

                dataList.getItemIndex();
            }

            protected function creationCompleteHandler(event:FlexEvent):void
            {
                var ias:int = getItemIndexByProperty(dataList, "name", "ansari");
                Alert.show(ias.toString() + " : " + dataList.getItemAt(ias).name);
            }

        ]]>
    </fx:Script>

</s:WindowedApplication>
0 голосов
/ 21 декабря 2011

Вы можете использовать это.

private function getItemInd(event:MouseEvent):void{
for each( var item:Object in dataList){    
if(item.name == "ansari")
{
var ias:int = dataList.getItemIndex(item);
Alert.show(ias.toString() + ": " + item.name);
break;
}
}
} 
0 голосов
/ 21 декабря 2011

getItemIndex ищет только корневой объект.Так, например, это будет работать:

var dataList:ArrayCollection = new ArrayCollection(["alauddn", "ansari"]);

private function getItemInd(event:MouseEvent):void{
    var name:String = "ansari";
    var ias:int = dataList.getItemIndex(name);
    Alert.show(ias.toString() + ": " + name);
}
...