Диспетчеризация событий Flex - PullRequest
1 голос
/ 28 января 2011

У меня есть несколько вопросов с конкретной структурой программы, которую я пишу.

Я использую Remote Object для удаленного вызова метода Rails (используя WebOrb). Проблема возникает в том, как я получаю свои данные обратно.

По сути, у меня есть функция getConditions, в которой я добавляю прослушиватель событий к своему удаленному вызову, а затем делаю удаленный вызов. Однако я хочу вернуть эти данные в getConditions, чтобы я мог их вернуть. Это проблема, потому что я получаю доступ только к данным результата события в обработчике события. Вот некоторый основной код, описывающий эту проблему:

public function getConditions():Array
    {

        remoteObject.getConditions.addEventListener("result", onConditionResult);
        remoteObject.getConditions();
       //Here is where I want to get my event.result data back

    }
public function onConditionResult(event:ResultEvent):void
    {
        //Here's the data that I want
        event.result;
    }

Как мне получить данные об обороте?

Ответы [ 3 ]

2 голосов
/ 29 января 2011

Удаленные вызовы в flex всегда асинхронны, поэтому вы не сможете вызывать getConditions () и ждать там результата. Вы должны использовать закрытие функции для обработки результатов, либо с помощью обработчика событий, чем вы объявляете в другом месте, либо динамического, созданного непосредственно в getConditions (), например:

remoteObject.getConditions.addEventListener("result", function(event:ResultEvent):void {
  // Run the code that you would want to when process the result.
});
remoteObject.getConditions();

Преимущество выполнения вышеизложенного состоит в том, что вы сможете «видеть» параметры, переданные getConditions (), или результат любой логики, которая произошла до addEventListener () в замыкании функции. Это, однако, требует небольшого снижения производительности по сравнению с объявлением явной функции (именно по этой причине).

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

2 голосов
/ 29 января 2011

вы делаете это так

public function getConditions():Array
{

    remoteObject.getConditions.addEventListener("result", onConditionResult);
    remoteObject.getConditions();

}
public function callMyExtraFunction(data:Object):void
{
     //Here is where you want to get your event.result data back
}
public function onConditionResult(event:ResultEvent):void
{
    //Here's the data that you want
    var data:Object = event.result;
    callMyExtraFunction(data);

}
0 голосов
/ 29 января 2011

Вы можете использовать Call Responder следующим образом:

<s:CallResponder id="getOperationsResult"/>

, а затем использовать эти строки для получения результата от операций get

getOperationResult.token = remoteObject.getOperation();

это создает вызов и возвращает результатсохраняет его в getOpresult

, куда бы вы ни захотели получить доступ, вы можете вызвать этот токен или getOperationResult.lastResult

Надеюсь, что это поможет Крису

...