Как получить результат от удаленного объекта AMFPHP Flex 4.5

У меня быстрый вопрос о flex 4 remoteObjects. Я хотел бы получить информацию из базы данных MySql через amfphp в Flex 4.5. Я использую тег удаленного объекта. Я хотел бы использовать атрибут результата, но мне кажется, что он не работает. Что я делаю неправильно?

Если я собираю информацию из БД без обработчика результатов, он работает нормально, но когда я хочу собрать информацию в массиве, это не сработает. Коллекция arraycollection никогда не заполняется получаемой мной информацией.

Это работает;

<?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"
           creationComplete="initApp()">

<fx:Declarations>
    <!-- Place non-visual elements (e.g., services, value objects) here -->
    <mx:RemoteObject id="myRemote" 
                     destination="solicitantService" 
                     source="resume.solicitantService"   
                     endpoint="http://localhost:8181/amfphp/gateway.php"/>
</fx:Declarations>

<fx:Script>
    <![CDATA[

        private function initApp():void
        {
            myRemote.getUsers();
        }

    ]]>
</fx:Script>

<mx:DataGrid id="myGrid" dataProvider="{myRemote.getUsers.lastResult}"/>    
</s:Application>

и это не работает.

<?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"
           creationComplete="initApp()">

<fx:Declarations>
    <!-- Place non-visual elements (e.g., services, value objects) here -->
    <mx:RemoteObject id="myRemote" 
                     destination="solicitantService" 
                     source="resume.solicitantService"   
                     endpoint="http://localhost:8181/amfphp/gateway.php"
                     result="myRemote_resultHandler(event)"/>
</fx:Declarations>


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

        [Bindable]
        private var users:ArrayCollection = new ArrayCollection();


        private function initApp():void
        {
            myRemote.getUsers();
        }

        protected function myRemote_resultHandler(event:ResultEvent):void
        {
            users = event.result as ArrayCollection;
        }

    ]]>
</fx:Script>

<mx:DataGrid id="myGrid" dataProvider="{users}"/>
</s:Application>

Что я делаю неправильно? кто-нибудь может помочь встретиться на этом? Я пробовал это как с искрой, так и с сеткой данных mx.

Что ж, я нашел решение. Из Php я восстанавливаю массив, а не ArrayCollection.


person DJ.    schedule 05.02.2012    source источник


Ответы (2)


amfPHP возвращает результаты не как ArrayCollection, а как массив. Молодцы, что выяснили эту часть.

Вот ссылка на код, который мне действительно помог. Он начинается с основных строк, затем объектов, а затем массива (объектов).

http://www.brentknigge.com/?q=node/499

person Roger    schedule 27.01.2013

Это потому, что вы назначаете массив коллекции массивов.

сложно ответить точно, не имея представления о функциях php. Если ваш php-сервис возвращает что-то вроде этого:

$outputArray['users'] = myUsers(); //here myUsers() is a function which is doing the query and fetching the results

вы можете поместить его в коллекцию массивов следующим образом:

var usersCollection:ArrayCollection = new ArrayCollection(event.result.usres);

Надеюсь, поможет

person Anas Bin Numan    schedule 10.10.2013