1

リストオブジェクトがあり、dataProviderを介してaddItemを使用してアイテムを追加しています。

リストにアイテムを追加する前に、それが重複していないことを確認したいと思います。dataProviderでindexOfを使用しようとしましたが、nullが返されます。配列にキャストしようとしましたが、機能しますが、要素がdataProviderに存在する場合でも、常に-1を返します。

私が使用できた唯一の方法は少しハッキーなようです。dataProviderで要素を見つけるためのより良い方法があるかどうか知りたいです。

<mx:Application xmlns:mx="http://www.adobe.com/2006/mxml" layout="absolute" styleName="plain" applicationComplete="init()">
    <mx:Script>
        <![CDATA[
            import mx.controls.List;
            [Bindable]
            public var testListArray:Array;


            public function init():void
            {
                testList.dataProvider.addItem('test');
                testList.dataProvider.addItem('banana');

                //search for element in dataProvider
                if(testList.dataProvider.toString().indexOf('banana') > -1)
                {
                    trace('found');
                }

                //search for element in dataProvider
                if(testList.dataProvider.toString().indexOf('goat') === -1)
                {
                    trace('not found');
                }
            }
        ]]>
    </mx:Script>
    <mx:List dataProvider="{testListArray}" x="260" y="204" id="testList" borderStyle="solid" borderColor="#000000"></mx:List>
</mx:Application>
4

3 に答える 3

4

配列をdataProviderプロパティにフィードしている場合でも、基になるdataProviderは常にArrayCollection型であり、Array型ではありません。入力として配列をサポートしますが、コンストラクターを使用してそれらをArrayCollectionに変換します。

ArrayCollection(source:Array)

次の方法を使用できます。

ArrayCollection.contains(item:Object):Boolean 

重複するアイテムを追加しないようにします。

于 2009-06-13T04:39:17.043 に答える
0

配列は引き続き使用できますが、ArrayCollectionのように動的ではありません...

public function addToArray(item:String):void {
    if (testListArray.indexOf(item) < 0){
       testListArray.push(item);
       testList.dataProvider = testListArray;
     } 
}

リストコントロールの作成後にデータを追加する場合にのみ、これを呼び出す必要があります。

于 2009-06-13T05:00:39.503 に答える
0

基になるデータの変更に伴ってリストを変更する場合は、Array の代わりに ArrayCollection を使用する必要があります。

そして、あなたの問題は toString() 関数を使用しているようです。そのはず:

var arr:Array = testList.dataProvider as Array;
if(arr)
{
    if(arr.indexOf("banana") > -1)
        trace("found");
}

dataProvider.toString() を実行するときは、配列を文字列に変換してから、文字列を検索します。

また、配列には addItem() 関数がないため、代わりに push() を使用する必要があります。addItem は ArrayCollections 用です。

于 2009-06-12T20:04:07.533 に答える