2013-12-13 4 views
0

Я создал SWF проект с гибким и у меня есть несколько флажков на него, и всякий раз, когда флажок seleced он будет вызывать обработчик флажок:Как создать Синхронную функцию Flex

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

вы можете создать 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

Как Flex Flash, ограничения на Flash также применяются к Flex. Один из них (на самом деле в новых версиях Flash это больше не действует на 100%), что Flash имеет только один поток. Этот поток делает все от обновления/рисования ui, обработки логики приложения, обработки ввода-вывода и т. Д. Поэтому синхронный вызов будет блокирующим вызовом, а в сообщении Client-Server этот блок может быть довольно длинным. Поэтому Flash не поддерживает блокировку вызовов на сервере, и вы не сможете найти решение для этого ... к сожалению.

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

0

Большинство флеш-операций ввода-вывода асинхронны, и нет возможности изменить это. Рассмотрите возможность использования встроенных вложенных обработчиков

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.

+1

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

+0

Это не должно быть, если вы не используете их в качестве обработчиков событий, например. переходя в «Ответчик». – artema

Смежные вопросы