如何知道异步递归活动何时完成?

时间:2011-06-30 12:39:12

标签: javascript events asynchronous recursion yui

我有一个基于目录结构构建列表的脚本。它从WebDAV资源读取以发现锁,每个文件,并附加节点和类,以将此结构显示为一系列嵌套列表,如果它被锁定,则列表项上具有类。

一切都运行得非常好,我现在要做的是为创建的列表节点分配功能。

我可以添加此功能,因为列表项是在异步回调的范围内创建的,但我想知道是否有任何常见的方法可能会等待一系列潜在的递归异步活动(X级目录)使用Y资源完成,并在此时安全地对整组创建的节点执行操作。

我问的原因是,而不是在发现资源的每次异步回调期间继续并添加功能,因为我使用YUI3并且它们具有各种便利,例如:

// Add functionality to items meeting the CSS selector criteria
Y.all('#select_projects_list li.file:not(#select_projects_list li.locked)').on('click', function(e){
    // do stuff with 'this'
});

如果我执行上述操作,它似乎比在每个异步回调中重复类似函数更有效,因为最终可能会产生数百个资源。

伪代码解决方案,想法和方法受到赞赏。

欢呼声。

1 个答案:

答案 0 :(得分:1)

使用事件委派。通常,如果您发现自己使用Y.all(...).on(...),则应该使用事件委派。

试试这个:

Y.one('#select_projects_list').delegate('click', handleClick, 'li.file:not(.locked)');

handleClick将在#select_projects_list中具有类“file”并且没有“已锁定”类的任何li上发生的任何点击时被调用。如果您以后添加,删除或更改任何这些li节点,则无需再执行任何操作或更改任何事件订阅。一位代表听众会这样做。在handleClick回调中,this将是li节点。

http://developer.yahoo.com/yui/3/event/#delegate