Как получить результат с удаленного объекта AMFPHP Flex 4.5
У меня есть быстрый вопрос о flex 4 remoteObjects. Я хотел бы получить информацию из БД MySql через amfphp для Flex 4.5. Я использую тег удаленного объекта. Я хотел бы использовать атрибут результата, но он мне не подходит. Что я делаю неправильно?
Если я собираю информацию из БД без обработчика результатов, он работает нормально, но когда я хотел бы собрать информацию в массиве, он не работает. Коллекция массива никогда не заполняется информацией, которую я получаю.
Это работает;
<?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 datagrid.
Ну, я нашел решение. Из Php я восстанавливаю Array, а не ArrayCollection.
2 ответа
amfPHP не возвращает результаты как ArrayCollection, а скорее как Array. Хорошо сделано, чтобы понять эту часть.
Вот ссылка на некоторый код, который действительно помог мне. Он начинается с основных строк, затем объектов, затем массив (объектов).
Это потому, что вы присваиваете массив коллекции массивов.
трудно дать точный ответ без понимания вашей функции 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);
Надеюсь, поможет