0

ユーザーがモバイルFlexアプリケーションで選択したアイテムの値を取得する際に問題が発生しました。リストからアイテムを選択すると、そのアイテムをArrayCollectionに配置します。しかし、値(trace())を確認すると、値は[object Object]であり、オブジェクトの実際の値にアクセスできないようです。これが私がしていることです:

private var selectedPlayers:ArrayCollection = new ArrayCollection();
            private var numOfPlayers:int;
...

//check if item is not already in selected players list
                if(!selectedPlayers.contains(playerList.selectedItem))
                {

                    //add the selected item to the selected players list
                    selectedPlayers.addItem(playerList.selectedItem);
                    numOfPlayers++;
                    trace("selected Players: " + selectedPlayers);

                }

trace()からの出力:

選択したプレイヤー:[オブジェクトオブジェクト]

アドバイスや洞察をありがとうございました。

更新:動作するコードは次のとおりです。

[Bindable]
            public static var selectedPlayers:ArrayCollection = new ArrayCollection([
                {Name: "testname" }]);

...

//check if item is not already in selected players list
                if(!selectedPlayers.contains(playerList.selectedItem.PName))
                {
                    //add the selected item to the selected players list
                    selectedPlayers.addItem({Name: playerList.selectedItem.PName});
                    numOfPlayers++;
                }
4

2 に答える 2

1

最初の問題は、配列の特定のアイテムではなく、配列をトレースしていることです。これはコメントで言及されました。

2番目の問題は、ArrayCollectionの要素がオブジェクトである可能性が最も高いことです。オブジェクトをトレースする場合、toString()メソッドを使用して文字列に変換されます。toString()メソッドを実装しない場合は、デフォルト、またはを取得します[object Object]

toString()メソッドを実装して、オブジェクトがトレースされたときにさまざまな出力を表示できます。

コードをデバッグモードで実行し、それを使用して変数を表示し、コレクションに実際に何が含まれているかを確認することもできます。

于 2011-09-02T13:46:18.240 に答える
1

私は今あなたのArrayCollectionの構造ではありません。

これを試してください。クリックハンドラーの2番目のトレースは、ACのプロパティ「Name」を返します。これをプロパティ名で更新します。

<?xml version="1.0" encoding="utf-8"?>
<s:Application xmlns:fx="http://ns.adobe.com/mxml/2009" 
               xmlns:s="library://ns.adobe.com/flex/spark" 
               xmlns:mx="library://ns.adobe.com/flex/mx" 
               minWidth="955" minHeight="600"
               initialize="application1_initializeHandler(event)">

    <fx:Script>
        <![CDATA[
            import mx.collections.ArrayCollection;

            private var selectedPlayers:ArrayCollection = new ArrayCollection([
                {Name:"iTunes", id:"1"}, 
                {Name:"MediaPlayer", id:"2"},
                {Name:"WinAmp", id:"3"}]) 

            protected function button2_clickHandler(event:MouseEvent):void
            {
                // TODO Auto-generated method stub
                trace ("selectedPlayers: " + selectedPlayers)
                trace (selectedPlayers.getItemAt(0).Name);

            }
        ]]>
    </fx:Script>


    <fx:Declarations>
        <!-- Place non-visual elements (e.g., services, value objects) here -->
    </fx:Declarations>



    <fx:Script>
        <![CDATA[
            import mx.events.FlexEvent;

            protected function application1_initializeHandler(event:FlexEvent):void
            {
                // TODO Auto-generated method stub

            }



        ]]>
    </fx:Script>

    <s:Button label="trace" click="button2_clickHandler(event)" />

</s:Application>

すべてのプレイヤー名が必要な場合は、ループが必要です。この場合、私もあなたを助けることができます。

BRフランク

于 2011-09-02T13:52:07.403 に答える