2011-12-21 7 views
2

私は同じ問題に直面しています。いくつか私に例を教えてもらえますか?フレックスarraycollection getitemindexは常に-1を返します

私のコードは次のとおりです。

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を返します。

+0

は、このアドビのブログチェックアウト:http://blogs.adobe.com/actionscriptdocs/2009/05/dataprovidergetitemindex.htmlを –

答えて

0

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); 
} 
0

あなたはこれを使用できます。

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; 
} 
} 
} 
7

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

また、あなたの場合にのみキー値情報を保存したい場合は、辞書や少なくとも動的オブジェクトを使用することを強くお勧めします。 – LoremIpsum

関連する問題