Проблема с доступом к значению выбранного элемента в списке - PullRequest
0 голосов
/ 02 сентября 2011

У меня проблема с получением значения элемента, который пользователь выбирает в моем мобильном приложении 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++;
                }

Ответы [ 2 ]

1 голос
/ 02 сентября 2011

У меня нет структуры вашего ArrayCollection.

Попробуйте, вторая трассировка в обработчике кликов вернет свойство "Имя" AC.Обновите это имя вашего свойства.

<?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 Frank

1 голос
/ 02 сентября 2011

Проблема Firist в том, что вы отслеживаете массив, а не конкретный элемент из массива. Это было упомянуто в комментариях.

Вторая проблема заключается в том, что элементы вашей коллекции ArrayCollection являются наиболее вероятными объектами. При трассировке объекта он преобразуется в строку с помощью метода toString (). Если вы не реализуете метод toString (), вы получите значение по умолчанию или [object Object].

Вы можете реализовать метод toString (), чтобы увидеть различный вывод при трассировке объекта.

Вы также можете запустить свой код в режиме отладки и использовать его для просмотра переменной, чтобы увидеть, что на самом деле находится в вашей коллекции.

...