2010-04-13 138 views
0

我已经从一个MySQL数据库返回多维数据阵列,当这种被收集的createNews函数创建用户界面。我遇到的问题是循环迭代比创建UI更快,是否有一种方法使用事件监听器的循环,所以它只在我的函数完成其工作后才继续?AS3环路和事件侦听器

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);  
} 

回答

0

您可以从完成创建ui元素(然后处理数组中的下一项)完成自定义回调。

 
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设置为事件处理器。

+0

都似乎工作,我不知道闪光灯是单线程。虽然createnews()确实会调用另外3个函数,所以也许是这样吗? – Ross 2010-04-14 09:37:17

0

您的createNews函数不会阻止循环,直到它返回? Actionscript是单线程的,所以我不确定当createNews函数尚未完成时循环如何继续。

+0

表示加载的组件转换(补间),或使用loader或urlloader加载某些东西,或使用timerEvent或setTimeout。这些都是异步的 – jonathanasdf 2010-04-14 02:38:17