У меня есть требование в приложении Flex для создания и заполнения объекта по результатам возврата из URL-адреса.Вот что мне нужно сделать:
- У меня есть класс, который взаимодействует с веб-сервером.
- У меня есть функция в этом классе (называемая getPerson), которая бывернуть объект Person, который заполняется из данных XML, возвращаемых веб-сервером.
Проблема, с которой я сталкиваюсь (и, похоже, это очень распространенная проблема, но я не нашел решениячто я вижу, что это сработает) в том, что метод загрузки URLLoader является асинхронным.
У меня есть прослушиватель событий, запускающий событие Event.COMPLETE, которое анализирует XML и заполняет мой объект в обработчике событий, нокак мне вернуть этот объект в исходный код моего приложения, которое первоначально вызывало мою функцию getPerson?
Таким образом, к моменту возвращения с сервера мой метод завершается, и я не могу вернуть заполненное лицообъект.
Мой вопрос: как мне это сделать?Я все еще довольно новичок в ActionScript и уже целый день вращаю свои колёса по этому вопросу.
Я добавил пример кода, который демонстрирует мою проблему - я упростил то, что использую:
Файл приложения MXML:
<?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="application1_creationCompleteHandler(event)">
<fx:Script>
<![CDATA[
import mx.events.FlexEvent;
protected function application1_creationCompleteHandler(event:FlexEvent):void
{
var d:DAL = new DAL();
d.CreateNewPerson( "John Smith" );
}
]]>
</fx:Script>
<fx:Declarations>
<!-- Place non-visual elements (e.g., services, value objects) here -->
</fx:Declarations>
</s:Application>
Файл DAL.cs:
package
{
import flash.events.Event;
import flash.net.URLLoader;
import flash.net.URLRequest;
import flash.net.URLRequestMethod;
import mx.controls.Alert;
public class DAL
{
public function DAL()
{
}
public function CreateNewPerson( Name:String ):void
{
var strXML:String = "<?xml version=\"1.0\" encoding=\"UTF-8\"?>";
var loader:URLLoader = new URLLoader();
loader.addEventListener(Event.COMPLETE, onPostComplete);
var request:URLRequest = new URLRequest( "http://www.cnn.com" );
request.method = URLRequestMethod.POST;
request.data = strXML;
loader.load(request);
}
private function onPostComplete( evt:Event ):void
{
//Process returned string
//Here is where I need to return my object
var obj:Object = new Object()
}
}
}
Что мне нужно сделать, так это каким-то образом вернуть переменную "obj" в файл приложения MXML, чтобы я мог использовать ее там.
Заранее спасибо!