Заполнение Datagrid из удаленного http сервиса - PullRequest
0 голосов
/ 21 июля 2009

Я пробую свое первое гибкое приложение. И возникают проблемы при добавлении данных из службы xml http в datagid.

Мой XML-файл выглядит так:

<players>

  <player>
    <name>test</name>
    <status>F</status>
    <claimed>1</claimed>
  </player>

  <player>
    <name>meta</name>
    <status>F</status>
    <claimed>1</claimed>
  </player>
</players>

Сначала я попытался заполнить данные необработанным способом, поэтому создал тег mxml для службы HTTP и добавил обработчики.

Но очень скоро я понял, что основной файл приложения стал нечитаемым (из-за огромного количества кода), поэтому я решил организовать его каким-то образом.

Поэтому решили заменить сервисы на отдельные как классы.

Мой новый код выглядит так:

MXML:

  <?xml version="1.0" encoding="utf-8"?>
    <mx:Application xmlns:mx="http://www.adobe.com/2006/mxml" 
            layout="absolute" creationComplete="main()"  height="756" borderColor="#FFFFFF" width="950" top="10" left="10" horizontalAlign="left" verticalAlign="top" backgroundGradientAlphas="[1.0, 1.0]" backgroundGradientColors="[#FCFCFC, #FCFCFC]">

        <mx:Panel width="900" height="727" layout="absolute" title="Игра ГО" horizontalAlign="center" horizontalCenter="0" top="10">
        <mx:Script>
            <![CDATA[

                import goclient.ListOfPlayers;
                import goclient.usersList;
                import goclient.Tester;
                import mx.controls.Alert;
                // And makes periodical requests to the server
                [Bindable]
                public var users:ListOfPlayers;
                [Bindable]
                public var test:Tester; 

                public function main():void{
                    test = new Tester();
                    users = new ListOfPlayers();



                }           

            ]]>
        </mx:Script>


            <mx:DataGrid doubleClickEnabled="true" dataProvider="{users.getPlayersList()}" 
                x="10" y="157" width="860" height="520" id="userList">
                <mx:columns>
                    <mx:DataGridColumn dataField="claimed" headerText="Was claimed" width="25"/>
                    <mx:DataGridColumn dataField="name" headerText="Name of the player"  />
                    <mx:DataGridColumn dataField="status" headerText="Status (Free or Busy)" />
                </mx:columns>
            </mx:DataGrid>

И класс обслуживания:

ListOfPlayers.as

package goclient
{
    import flash.utils.Timer;
    import mx.controls.Alert;
    import mx.collections.ArrayCollection;
    import mx.rpc.events.ResultEvent;
    import mx.rpc.http.mxml.HTTPService;

    public class ListOfPlayers
    {
        public var usersListService:HTTPService;
        private var minTimer:Timer = new Timer(100000, 0);  
        private var playersData:ArrayCollection;    
        private var person:currentPerson; 

        public function ListOfPlayers()
        {
            usersListService = new HTTPService();
            usersListService.url = "http://127.0.0.1:8000/go/active/";
            usersListService.addEventListener(ResultEvent.RESULT, resultHandler);
            //Alert.show("Here");
            sendData(); 
            //minTimer.addEventListener(TimerEvent.TIMER, sendData);
            //minTimer.start();

        }

        public function getResp():String
        {
            return "Resr";
        }

        public function resultHandler(event:ResultEvent):void
        {
            //person = new currentPerson(event.result.current.username, event.result.current.img, event.result.current.rank);
            playersData = event.result.players.player;
            Alert.show("resh");

        }
        public function sendData():void
        {
            usersListService.send();
        }

        public function getPlayersList():ArrayCollection
        {
            Alert.show(playersData.toString());
            return playersData;
        }

    }
}

Проблема в том, что в таблице данных ничего не отображается

Я только начинающий, поэтому, пожалуйста, посоветуйте, что я не так понял с классом

1 Ответ

2 голосов
/ 21 июля 2009

Функция результата (в классе ListOfPlayers) должна выдавать список игроков, а не функцию, вызывающую веб-сервис.

Что вы можете сделать, это добавить это в серверный класс:

[Bindable]
public var playersData:ArrayCollection; 

и, на ваш взгляд, добавьте также эту переменную с тегом bindable и установите значение, добавив эту строку в main (): PlayersData = users.playersData;

тогда поставщик данных сетки данных "{PlayersData}"

это должно работать. Но со списком XML всегда немного трудно понять, насколько глубоко вы находитесь в дереве;)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...