这是关于Flex的超级新手问题。虽然我是一名经验丰富的程序员,但这是我的第一个Flex应用程序;请耐心等待我的Flex代码。
我有一个用ColdFusion编写的Web服务。在这个Web服务中,有两个功能;一个是在测验中返回所有问题,另一个是将所有答案选择返回到测验中的问题。
[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;
}
我有上面的代码。在creationComplete上调用loadQuestions来检索问题。事情很好。我想要做的是在同一个Web服务中调用另一个函数returnAnswers,以返回问题的答案选项。由于我已经将cfquiz与Web服务相关联,因此我使用cfquiz来调用returnAnswers。但是,有一个与cfquiz关联的事件监听器,当returnAnswers返回结果时,将调用resultHandler。
我的问题是,首先,是否可以检查哪个函数在resultHandler中返回结果?如果是这样,怎么样?第二,在同一个Web服务中处理多个函数调用的最佳方法是什么?
提前致谢, 蒙
答案 0 :(得分:2)
是的,你可以。您需要为每个方法指定一个处理函数,然后调用另一个Web服务。
答案 1 :(得分:1)
更好的方法是使用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
}
}
答案 2 :(得分:0)
我有点困惑,因为我看不到你在哪里调用实际的web服务功能,例如from these examples,我期待看到:
cfquiz = new RemoteObject("ColdFusion");
cfquiz.source = "CFCertExam.cfquiz";
cfquiz.addEventListener(ResultEvent.RESULT, resultHandler);
cfquiz.myCFCFunctionCall(); /* where is this? */
无论如何,AFAIK你可以创建一个新的远程对象实例,并将其设置为拥有自己的事件监听器。
希望有所帮助。