Как обрабатывать вызовы нескольких функций в одном веб-сервисе? - PullRequest
1 голос
/ 22 января 2011

Это супер новый вопрос о Flex.Хотя я опытный программист, это мое первое приложение Flex;Пожалуйста, потерпите меня за мои коды Flex.

У меня есть веб-сервис, написанный на ColdFusionВ этом веб-сервисе есть две функции;один - вернуть все вопросы в викторине, а второй - вернуть все варианты ответов на вопросы в викторине.

            [Bindable]
        private var questionArray:ArrayCollection;
        private var cfquiz:RemoteObject;

        private function loadQuestions():void {
            currentQuestionCounter = 0;
            btnPrev.enabled = false;
            btnNext.enabled = false;
            cfquiz = new RemoteObject("ColdFusion");
            cfquiz.source = "CFCertExam.cfquiz";
            cfquiz.addEventListener(ResultEvent.RESULT, resultHandler);
        }

        private function resultHandler(event:ResultEvent):void {
            questionArray = event.result as ArrayCollection;

            txt1Questions.htmlText = questionArray.getItemAt(currentQuestionCounter).Question_Text;
            btnNext.enabled = true;
        }

У меня есть коды выше.loadQuestions вызывается при creationComplete для получения вопросов.Все работает хорошо.Я хочу вызвать другую функцию в том же веб-сервисе returnAnswers, чтобы получить варианты ответа на вопрос.Поскольку cfquiz уже связан с веб-сервисом, я использовал cfquiz для вызова returnAnswers.Однако уже есть прослушиватель событий, связанный с cfquiz, resultHandler вызывается, когда returnAnswers возвращается с результатами.

Мои вопросы, во-первых, можно ли проверить, какая функция возвращает результаты в resultHandler?Если так, то как?И, во-вторых, как лучше всего обрабатывать вызовы нескольких функций в одном веб-сервисе?

Заранее спасибо, Монте

Ответы [ 3 ]

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

Да, вы можете.Вам нужно указать функцию-обработчик для каждого метода, который в свою очередь вызывает другой веб-сервис.

1 голос
/ 05 октября 2011

Лучший способ сделать это - использовать AsyncToken и AsyncResponder вместо addEventListener, как показано ниже.

tokenA = cfquiz.methodA();
tokenA.addResponder(new AsyncResponder(onResultForMethodA, onFaultMethodA));

tokenB = cfquiz.methodA();
tokenB.addResponder(new AsyncResponder(onResultForMethodB, onFaultMethodB));

tokenC = cfquiz.methodA();
tokenC.addResponder(new AsyncResponder(onResultForMethodC, onFaultMethodC));

или

tokenA = cfquiz.methodA();
var responderA:IResponder = new AsyncResponder(onResult, onFault, "methodA");
tokenB = cfquiz.methodB();
var responderB:IResponder = new AsyncResponder(onResult, onFault, "methodB");

tokenA.addResponder(responderA);
tokenB.addResponder(responderB);


private function onResult(evt:ResultEvent, token:Object):void {
   if(token == "methodA" ) {
     //logic for methodA
   }
   if(token == "methodB" ) {
     //logic for methodB
   }
}
0 голосов
/ 22 января 2011

Я немного сбит с толку, так как не вижу, где вы вызываете реальную функцию веб-службы, например, из этих примеров , я ожидаю увидеть:

cfquiz = new RemoteObject("ColdFusion");
cfquiz.source = "CFCertExam.cfquiz";
cfquiz.addEventListener(ResultEvent.RESULT, resultHandler);
cfquiz.myCFCFunctionCall(); /* where is this? */

В любом случае, AFAIK, вы можете создать новый экземпляр удаленного объекта и настроить его на собственный слушатель событий.

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

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