我已经使用flex创建了一个swf项目,并且我有一些复选框,每当选中该复选框时,它将调用复选框处理程序:
function checkBoxHandler() {
//call resultHandling
var obj:myObjectType = new myObjectType();
resultHandling(obj)
}
function resultHandling(myObject:myObjectType) {
//implementation code to send a request to server side
}
是否可以将“resultHandling(...)”作为同步函数?因此,每当我们调用该函数时都会出现问题,尤其是在有多个函数调用时
答案 0 :(得分:2)
由于Flex是Flash,Flash的限制也适用于Flex。其中一个是(实际上在较新的Flash版本中,这不再是100%有效),Flash只有一个线程。该线程完成了更新/绘制ui,处理应用程序逻辑,处理IO等所做的一切。因此,同步调用将是阻塞调用,而在客户端 - 服务器通信中,此块可能会很长。因此,Flash不支持阻止对服务器的调用,并且您将无法找到解决方案......不幸的是。
但请放心,实际上您将开始以这种方式创建更强大的应用程序。我注意到即使在我可以使用同步调用的地方创建越来越多的异步解决方案: - )
答案 1 :(得分:0)
您可以创建一个arraycollection并将所有myObjectType对象存储在其中。然后做一些像 -
var arr:ArrayCollection = new ArrayCollection();
function checkBoxHandler() {
//call resultHandling
var obj:myObjectType = new myObjectType();
arr.addItem(obj);
}
function resultHandling(myObject:myObjectType) {
//implementation code to send a request to server side
}
function webServiceResponseHandler(){
//receive the response from server
sendWSRequest();
}
function sendWSRequest(){
if(arr.length > 0)
{
resultHandling(arr.getItemAt(0));
arr.removeItemAt(0);
}
}
答案 2 :(得分:0)
大多数Flash I / O都是异步的,没有办法改变它。考虑使用内联嵌套处理程序
function checkBoxHandler() {
var obj:myObjectType = new myObjectType();
var resultHandling:Function = function():void {
//you can just reference obj here
var resultHandling2:Function = function():void {
};
};
//implementation code to send a request to server side
}
或使用任务计划程序,例如Parsley Command Framework。