as3 цикли и слушатели на събития

Имам масив, който връща многоизмерни данни от база данни на mysql, когато това се събере, функцията createNews създава потребителския интерфейс. Проблемът, който имам, е, че цикълът се повтаря по-бързо, отколкото се създава потребителският интерфейс, има ли начин да се използват слушатели на събития с цикли, така че да продължи само след като функцията ми приключи работата си?

var t:Array = responds.serverInfo.initialData;  
for (var i:uint = 0; i < t.length; i++) {
    var date = t[i][1];
    var newstitle = t[i][2];
    var story= t[i][3];
    var image = t[i][4];

    createNews(date, newstitle, story, image);    
}

person Ross    schedule 13.04.2010    source източник


Отговори (2)


можете да имате персонализирано обратно извикване, когато приключите със създаването на елемента на потребителския интерфейс, който след това ще обработи следващия елемент в масива.

var t:Array = responds.serverInfo.initialData;
var numProcessed:int = 0;

private function processNext() : void {
    if (numProcessed == t.length) return;
    var date = t[numProcessed][1];
    var newstitle = t[numProcessed][2];
    var story= t[numProcessed][3];
    var image = t[numProcessed][4];

    numProcessed++;

    createNews(date, newstitle, story, image);  
}

в зависимост от това как работи вашата функция createNews и как е структурирано всичко, вашият процес на извикване на processNext, когато потребителският интерфейс е готов, ще се различава. Предполагам, че createNews ще създаде нов клас или нещо подобно, в този случай ще прикачите слушател на събития към този нов клас, ще слушате за събитие COMPLETE, което ще бъде изпратено, когато създаването приключи, и ще зададете processNext като манипулатор на събития.

person jonathanasdf    schedule 13.04.2010
comment
и двете изглежда работят, не знаех, че флашът е еднонишков. Въпреки че createnews() извиква още 3 функции, така че може би това е? - person Ross; 14.04.2010

Вашата функция createNews не блокира ли цикъла, докато не се върне? Actionscript е еднонишков, така че не съм сигурен как цикълът може да продължи, когато функцията createNews все още не е приключила.

person Martin Konecny    schedule 13.04.2010
comment
кажете, че зареденият компонент преминава (tweens) или зарежда нещо, използвайки loader или urlloader, или използвайки timerEvent, или setTimeout. Всички те биха били асинхронни - person jonathanasdf; 14.04.2010